我需要排序 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>
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
您可以轻松地按值枚举值/条目。您只需转换为适当的类型即可激活 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
}