1 Pluspunkt 0 Minuspunkte

Ich habe eine Klasse

public class MyClass
{
    public int ID { get; set; }
    public string Name { get; set; }
    //...
}

und möchte diese in einem Dictionary speichern.

Dictionary<int, MyClass> myDictionary = new Dictionary<int, MyClass>
{
    { 1, new MyClass { ID = 1, Name = "Objekt 1" } },
    { 2, new MyClass { ID = 2, Name = "Objekt 2" } },
    { 3, new MyClass { ID = 3, Name = "Objekt 3" } }
};

Wie kann ich das Dictionary anhand der Werte in MyClass->ID sortieren?

von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Dazu kannst du Linq verwenden.

var sortedDictionary = myDictionary.OrderBy(kv => kv.Value.ID).ToDictionary(kv => kv.Key, kv => kv.Value);

von (690 Punkte)  
0 Pluspunkte 0 Minuspunkte

Du kannst das Dictionary in eine List<KeyValuePair> umwandeln.

List<KeyValuePair<int, MyClass>> keyValueList = new List<KeyValuePair<int, MyClass>>(myDictionary);

Die kannst du dann anhand der ID sortieren.

for (int i = 0; i < keyValueList.Count - 1; i++)
{
    for (int j = 0; j < keyValueList.Count - i - 1; j++)
    {
        if (keyValueList[j].Value.ID > keyValueList[j + 1].Value.ID)
        {
            // Tausche Elemente
            var temp = keyValueList[j];
            keyValueList[j] = keyValueList[j + 1];
            keyValueList[j + 1] = temp;
        }
    }
}

und wieder zu einem Dictionary zurück umwandeln.

Dictionary<int, MyClass> sortedDictionary = new Dictionary<int, MyClass>();
foreach (var pair in keyValueList)
{
    sortedDictionary.Add(pair.Key, pair.Value);
}
von (728 Punkte)