Objekte in Liste nach Eigenschaften für das Objekt sortieren

8

Ich habe eine Liste von Objekten in C #. Alle Objekte enthalten die Eigenschaften code1 und code2 (neben anderen Eigenschaften). Die Liste der Objekte befindet sich in keiner bestimmten Reihenfolge. Ich muss die Liste der Objekte nach den Eigenschaften code1 und code2 sortieren.

Beispiel:

%Vor%

Beispielcode 1 = 004
Beispielcode 2 = 001, 002, 003, 004, 016
Beispielcode 1 = 005
Beispielcode 2 = 001, 002, 003, 004

Also nach der Sortierung möchte ich die Objekte in der folgenden Reihenfolge

004 001
004 002
004 003
004 005
004 016
005 001
005 002
005 003
005 004

    
Baxter 04.04.2012, 14:27
quelle

2 Antworten

13

Sie können Linq-Erweiterungen verwenden (die ursprüngliche Liste wird unsortiert belassen):

%Vor%

Um die ursprüngliche Liste durch eine sortierte zu ersetzen, machen Sie eine kleine Änderung (nicht sehr effizient, es erstellt eine neue Liste):

%Vor%

Dies setzt voraus, dass Ihre Liste vom richtigen Typ ist, etwa wie folgt:

%Vor%

Und keine Liste von Objekten, in diesem Fall müssten Sie .Cast<>() oder .OfType<>() verwenden.

    
Adam Houldsworth 04.04.2012, 14:29
quelle
9

Beachten Sie, dass die Antwort von Adam Houldsworth mit dem Aufruf .ToList() unnötigerweise eine neue Liste erstellt. Wenn Ihre Liste groß ist, kann dies zu einem inakzeptablen Speicherdruck führen. Es wäre wahrscheinlich besser, die Liste an Ort und Stelle zu sortieren, indem Sie eine benutzerdefinierte Vergleichsfunktion bereitstellen:

%Vor%

Wenn diese Reihenfolge eine inhärente Eigenschaft Ihres Typs ist, können Sie alternativ IComparable<T> für Ihren Typ implementieren und einfach

aufrufen %Vor%

... welches die IComparable<T>.CompareTo() Implementierung verwendet.

    
phoog 04.04.2012 15:06
quelle

Tags und Links