2009-03-06 9 views
0

Ich habe eine List sort question. Ich bin mit C# 3.0 und einer generischen Listenstruktur wie folgt aus:So sortieren Sie den Wert eines Elements einer Liste <> in einer übergeordneten Liste <>

public class myObject 
{ 
    public int ID { get; set; } 
    public List<mySetting> setting { get; set; } 
} 

public class mySetting 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Value { get; set; } // sort on this! 
} 

mit dieser Struktur, ich bin eine Liste der myObject mit einer LINQ-Abfrage zu füllen.

List<myObject> lmo = new List<myObject>(); 
lmo.SomeFillOperation(): 

Was ich jetzt tun möchte, ist Art das gesamte List<myObject> auf den einzelnen <mySetting>[].Value Werte. BEARBEITEN: (Dies würde also nach einem Schlüsselindex von zum Beispiel mySetting [3] .Value sortieren). Ich weiß, ich könnte es möglicherweise in meinem SomeFillOperation() tun, aber ich möchte es tun, nachdem die Liste gebildet wurde.

Gibt es einen empfohlenen oder einfachen Weg, dies zu tun? Gibt es ein gutes Beispiel, das du gesehen hast? Danke im Voraus!

+0

Sie haben eine Liste von .Value's. Welcher bestimmt, ob das myObject vor oder nach einem anderen kommt? –

+0

Sorry, notwendige Frage, danke Tom: Das würde nach einem Schlüsselindex innerhalb der Liste zB mySetting [3] sortieren. –

Antwort

5

Nun, List<T> hat bereits eine Sort Methode, wenn Sie es an Ort und Stelle sortieren wollen - oder Sie könnten LINQ OrderBy Methode verwenden. OrderBy ist etwas einfacher als Sort:

var sorted = lmo.OrderBy(x => x.Value); 

aber auch Sort ist nicht so schlecht:

lmo.Sort((x, y) => x.Value.CompareTo(y.Value)); 

EDIT: Kommentar auf die Frage gelesen hatte, habe ich nicht mehr verstehen, die Frage! Verlassen Sie diese Antwort hier als potenziell nützliche Platzhalter, während ich zu Abend essen ...

0

Da Sie 3.0 verwenden, verwenden Sie LINQ:

var newList = lmo.OrderBy(i => i.Value); 

und

var newList = lmo.OrderByDescending(i => i.Value); 
1
int MyObjectComparison(MyObject x, MyObject y) 
{ 
    return x.setting[0].Value.CompareTo(y.setting[0].Value); 
} 

lmo.Sort(MyObjectComparison); 

Natürlich Dies setzt voraus, dass Sie den Wert des ersten Elements in der Einstellung verwenden möchten (und dass diese Einstellung garantiert mindestens ein Element enthält). Eine Lösung mit weniger Annahmen wird folgen, wenn mehr Informationen gegeben werden.

Verwandte Themen