9

我需要排序 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吗?

4

2 回答 2

8

以下将为您提供基于 OrderedDictionary 的排序字典。

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

但是有一件事,ToDictionary返回了一个常规字典,但是在字典中维护了查找的顺序,只要在字典中插入任何新项目,就无法保证顺序。为避免这种情况,请使用SortedDictionary<TKey,TValue>which 具有将常规字典作为参数的构造函数

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

(确保string在上面的行中替换为正确的 Key 和 value 类型)

输出:

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
于 2012-12-12T06:24:26.380 回答
3

您可以轻松地按值枚举值/条目。您只需转换为适当的类型即可激活 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
}
于 2012-12-12T06:20:58.387 回答