485 Stimmen

List<T> OrderBy Alphabetische Reihenfolge

Ich verwende C# auf Framework 3.5. Ich bin auf der Suche nach schnell sortieren ein Generic List<T> . Für dieses Beispiel nehme ich an, ich habe eine Liste von Person mit einer Eigenschaft von lastname. Wie würde ich diese Liste mithilfe eines Lambda-Ausdrucks sortieren?

List<Person> people = PopulateList();
people.OrderBy(???? => ?????)

745voto

Marc Gravell Punkte 970173

Wenn Sie eine In-Place-Sortierung meinen (d.h. die Liste wird aktualisiert):

people.Sort((x, y) => string.Compare(x.LastName, y.LastName));

Wenn Sie eine neue Liste meinen:

var newList = people.OrderBy(x=>x.LastName).ToList(); // ToList optional

107voto

Jon Skeet Punkte 1325502

Soll die Liste an Ort und Stelle sortiert werden oder nur eine geordnete Reihenfolge des Inhalts der Liste? Letzteres ist einfacher:

var peopleInOrder = people.OrderBy(person => person.LastName);

Um an Ort und Stelle zu sortieren, bräuchten Sie eine IComparer<Person> oder eine Comparison<Person> . Zu diesem Zweck sollten Sie Folgendes in Betracht ziehen ProjectionComparer sur MiscUtil .

(Ich weiß, ich erwähne MiscUtil immer wieder - es ist einfach immer wieder relevant...)

28voto

Danimal Punkte 7510
people.OrderBy(person => person.lastname).ToList();

25voto

vampire203 Punkte 331

Sie können linq :) mit :

System.linq;
var newList = people.OrderBy(x=>x.Name).ToList();

15voto

Bruno Punkte 151
private void SortGridGenerico< T >(
          ref List< T > lista       
    , SortDirection sort
    , string propriedadeAOrdenar)
{

    if (!string.IsNullOrEmpty(propriedadeAOrdenar)
    && lista != null
    && lista.Count > 0)
    {

        Type t = lista[0].GetType();

        if (sort == SortDirection.Ascending)
        {

            lista = lista.OrderBy(
                a => t.InvokeMember(
                    propriedadeAOrdenar
                    , System.Reflection.BindingFlags.GetProperty
                    , null
                    , a
                    , null
                )
            ).ToList();
        }
        else
        {
            lista = lista.OrderByDescending(
                a => t.InvokeMember(
                    propriedadeAOrdenar
                    , System.Reflection.BindingFlags.GetProperty
                    , null
                    , a
                    , null
                )
            ).ToList();
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X