I'm mit C# auf Framework 3.5. Ich möchte eine generische Liste
schnell sortieren. Für dieses Beispiel nehme ich an, dass ich eine Liste vom Typ Person
mit einer Eigenschaft von lastname habe. Wie würde ich diese Liste mit einem Lambda-Ausdruck sortieren?
List<Person> people = PopulateList();
people.OrderBy(???? => ?????)
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
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, brauchen Sie einen IComparer
oder einen Comparison
. Hierfür können Sie ProjectionComparer
in MiscUtil in Betracht ziehen.
(Ich weiß, ich erwähne MiscUtil immer wieder - es ist einfach immer wieder relevant...)
people.OrderBy(person => person.lastname).ToList();