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