簡體   English   中英

如何在C#中使用Linq對OrderedDictionary進行排序(使用.NET 3.5)?

[英]How to sort an OrderedDictionary using Linq in C# (using .NET 3.5)?

我需要對OrderedDictionary進行排序(System.Collections.Specialized)我有這樣的代碼:

var od = new System.Collections.Specialized.OrderedDictionary();
od.Add("a1", 3);
od.Add("a2", 5);
od.Add("a3", 2);
od.Add("a4", 4);

我希望使用值對其進行排序。 我可以使用Linq嗎?

以下將根據您的OrderedDictionary為您提供一個排序字典。

var normalOrderedDictionary= od.Cast<DictionaryEntry>()
                       .OrderBy(r=> r.Value)
                       .ToDictionary(c=> c.Key, d=> d.Value);

但有一件事, ToDictionary返回了一個常規字典,但是在字典中維護了查找順序,只要在字典中插入任何新項目,就無法保證順序。 要避免這種情況,請使用SortedDictionary<TKey,TValue> ,它具有將常規字典作為參數的構造函數

var sortedDictionary = new SortedDictionary<string, string>(normalOrderedDictionary);

(確保使用上面一行中Key和value的正確類型替換string

輸出:

foreach (var entry in sortedDictionary)
    Console.WriteLine("Key: {0} Value: {1}", entry.Key, entry.Value);

Key: a3 Value: 2
Key: a1 Value: 3
Key: a4 Value: 4
Key: a2 Value: 5

您可以輕松地按值枚舉值/條目。 您只需要轉換為適當的類型以激活linq功能。

var sortedOrder = od.Values
    .Cast<int>()        // this is an enumeration of ints
    .OrderBy(i => i);;  // enumerate through ordered by the value

foreach (var item in sortedOrder)
{
    // do stuff
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM