2009-08-10 11 views
0

Ich habe eine Liste von Objekten, die ich brauche, um die Liste basierend auf Objekt Eigenschaft1 zu sortieren, und ich muss die resultierende Liste mit Objekt Eigenschaft2 wieder zu sortieren, ohne die Gruppierung in der ersten Sortierung zu verlieren .... für ex: obj hat 2 Eigenschaftsname und Standort ich brauche eine endgültige Liste der Objekte zu haben, die mit dem Bereich und Objekte der gleichen Region sortiert wurde, sollte nach dem Namen sortiert werden ...Liste Sortierung in C#

Antwort

3

(Vorausgesetzt, dass Sie nicht LINQ zur Verfügung haben, die diese trivial macht.)

Wenn Sie in MiscUtil anschauen, werden Sie zwei nützliche Klassen finden: ProjectionComparer und LinkedComparer (IIRC).

ProjectionComparer implementiert im Grunde das LINQ "order by" -Konzept - Sie geben an, wie ein Quellelement in einen Schlüsselwert konvertiert wird, und der Vergleicher wird nach diesen Schlüsselwerten sortiert.

LinkedComparer nimmt zwei Vergleiche und gibt einen neuen Vergleich zurück, der zuerst den "primären" Vergleich und den "sekundären" Vergleich verwendet, wenn die Werte in Bezug auf den primären Vergleichswert gleich sind.

Erstellen Sie zwei Projektionsvergleicher (einen für jede Eigenschaft) und dann einen verknüpften Vergleich mit den beiden, und geben Sie diesen an List<T>.Sort weiter. Lassen Sie uns wissen, wenn Sie ein vollständiges Codebeispiel benötigen, aber es wäre so etwas wie (unter Verwendung von C# 3) sein:

var comparer = new LinkedComparer<Foo> 
    (ProjectionComparer<Foo>.Create(x => x.FirstProperty), 
     ProjectionComparer<Foo>.Create(x => x.SecondProperty)); 

(In C# 2 können Sie anonyme Methoden verwenden, sie würden nur ein bisschen mehr langfris sein winded.)

0

Eine Liste hat eine Sort-Methode, die einen Comparison-Delegaten als Argument verwendet. Es gibt auch Überladungen, bei denen Sie Ihren eigenen Vergleich übergeben können.

So können Sie eine Klasse schreiben, die IComparer implementiert. Dann schreiben Sie in der Implementierung dieser Klasse den Code, in dem Sie die 2 Objekte in den gewünschten Eigenschaften vergleichen.

Verwandte Themen