如何在C#中使用Linq对OrderedDictionary进行排序(使用.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() .OrderBy(r=> r.Value) .ToDictionary(c=> c.Key, d=> d.Value); 

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

 var sortedDictionary = new SortedDictionary(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 

您可以轻松地按值枚举值/条目。 您只需要转换为适当的类型以激活linqfunction。

 var sortedOrder = od.Values .Cast() // this is an enumeration of ints .OrderBy(i => i);; // enumerate through ordered by the value foreach (var item in sortedOrder) { // do stuff }