字典<string,myobject =“”>或列表<myobject>与C#3.5?</myobject> </string,>

时间:2008-10-28 21:24:28

标签: c# .net collections c#-3.0

我经常在C#2.0中使用Dictionary,第一个键是包含唯一标识符的字符串。

我正在学习C#3.0 +,似乎我现在可以简单地使用List并简单地对该对象执行LINQ以获取特定对象(使用.where())。

那么,如果我理解得很好,那么Dictionary类已经失去了它的目的?

4 个答案:

答案 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

和列表

http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx