我经常在C#2.0中使用Dictionary,第一个键是包含唯一标识符的字符串。
我正在学习C#3.0 +,似乎我现在可以简单地使用List并简单地对该对象执行LINQ以获取特定对象(使用.where())。
那么,如果我理解得很好,那么Dictionary类已经失去了它的目的?
答案 0 :(得分:13)
不,字典在给定密钥的情况下更有效率。
您仍需要遍历列表以查找所需内容的列表。字典会进行查找。
答案 1 :(得分:5)
如果您只有一个List,那么进行LINQ选择将扫描列表中的每个项目,将其与您要查找的项目进行比较。
然而,Dictionary会计算您要查找的字符串的哈希码(由GetHashCode方法返回)。然后使用该值更有效地查找字符串。有关其工作原理的详细信息,请参阅Wikipedia。
如果你有多个字符串,初始(List)方法将开始变得非常缓慢。
答案 2 :(得分:2)
恕我直言,字典方法将比LINQ快很多,所以如果你有一个包含很多项目的数组,你应该使用Dictionary。
答案 3 :(得分:2)
Dictionary实现为哈希表。因此,它应该为查找提供恒定的时间访问。 List实现为动态数组,为您提供线性时间访问。
基于底层数据结构,词典仍然可以为您提供更好的性能。
词典上的MSDN文档
http://msdn.microsoft.com/en-us/library/xfhwa508.aspx
和列表