按键对字典进行sorting

我有一个像C#中的字典

Dictionary<Person, int> 

我想对字典进行sorting(Person类中的字段)。 我该怎么做? 在互联网上的每一个可用的帮助是列表没有特定的例子就地sorting字典。 任何帮助将不胜感激!

你不能sortingDictionary<TKey, TValue> – 它本身是无序的。 (或者说,检索条目的次序是特定于实现的,不应该依赖于版本间的相同方式,因为sorting不是其devisefunction的一部分。)

可以使用SortedList<TKey, TValue>SortedDictionary<TKey, TValue> ,这两个键都按键sorting(如果您将IEqualityComparer<T>传递给构造函数, IEqualityComparer<T>可configuration的方式) – 可能对您有用?

SortedList这个名字中,不要太注意单词“list” – 它仍然是一个字典,它将键映射到值。 它在内部有效地使用列表实现 – 所以不用哈希码查找,而是进行二分search。 SortedDictionary同样基于二进制search,但通过树而不是列表。

尝试使用SortedDictionary

通过devise,字典是不可sorting的。 如果您需要在字典中使用此function,请改为使用SortedDictionary。

看看SortedDictionary ,甚至有一个构造函数重载,所以你可以传入你自己的IComparable进行比较。

正确的答案已经陈述(只使用SortedDictionary)。

但是,如果碰巧你需要将你的集合保存为Dictionary,那么可以按照有序的方式访问Dictionary键,例如,通过对List中的键进行sorting,然后使用这个列表来访问Dictionary。 一个例子…

 Dictionary<string, int> dupcheck = new Dictionary<string, int>(); 

…一些代码填写“dupcheck”,然后…

 if (dupcheck.Count > 0) { Console.WriteLine("\ndupcheck (count: {0})\n----", dupcheck.Count); var keys_sorted = dupcheck.Keys.ToList(); keys_sorted.Sort(); foreach (var k in keys_sorted) { Console.WriteLine("{0} = {1}", k, dupcheck[k]); } } 

不要忘记using System.Linq; 为了这。

当Dictionary被实现为散列表时,SortedDictionary被实现为红黑树。

如果您没有利用algorithm中的顺序,只需要在输出前对数据进行sorting,则使用SortedDictionary将会对性能产生负面影响

你可以像这样“sorting”字典:

 Dictionary<string, int> dictionary = new Dictionary<string, int>(); // algorithm return new SortedDictionary<string, int>(dictionary);