按键对字典进行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);