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