【发布时间】:2013-09-06 02:54:46
【问题描述】:
我不是 C# 和 LINQ 方面的专家。
我有一个Dictionary,我理解为一个哈希表,也就是key不排序。
dataBase = new Dictionary<string, Record>()
Record 是一个用户定义的类,它保存给定键字符串的许多数据。
我发现了一个有趣的例子,它通过 LINQ 将这个 Dictionary 转换为 sorted 字典:
var sortedDict = (from entry in dataBase orderby entry.Key ascending select entry)
.ToDictionary(pair => pair.Key, pair => pair.Value);
此代码可以正常工作。生成的sortedDict 按键排序。
问题:我发现sortedDict还是一个哈希表,一个类型:
System.Collections.Generic.Dictionary<string, Record>
我预计生成的字典应该是一种map,就像在 C++ STL 中一样,它通常实现为(平衡)二叉树以保持键的顺序。但是,生成的字典仍然是一个哈希表。
sortedDict如何维护订单?哈希表不能保存键的顺序。 C#的Generic.Dictionary的实现不是典型的哈希表吗?
【问题讨论】:
-
通过使用
ToDictionary(),您请求并获得了Dictionary。如果要维护排序的 Diecionary,请使用SortedDictionary -
我知道。但是,我在最后一刻需要一个排序的字典。我的问题是
Dictionary如何保持排序,这对我来说很奇怪。 LINQ 代码实际上构建了一个 sorted 字典,而类型仍然是字典。 -
linq 只是对
Dictionary进行排序,它不会创建SortedDictionary
标签: c# dictionary hashtable