【发布时间】:2010-11-03 19:00:54
【问题描述】:
我有 60k 项需要对照 20k 查找列表进行检查。是否有一个集合对象(如List、HashTable)提供了一个非常快的Contains() 方法?还是我必须自己写?换句话说,默认的Contains() 方法是只扫描每个项目还是使用更好的搜索算法。
foreach (Record item in LargeCollection)
{
if (LookupCollection.Contains(item.Key))
{
// Do something
}
}
注意。查找列表已排序。
【问题讨论】:
-
Contains for List 不适用于对象列表,因为它正在比较引用。
-
排序数据?二进制搜索 - 请参阅@Mark 的答案。
-
根据我的经验,HashtTable 胜过最多 200 万个项目
-
顺便说一句,如果您的元素的顺序有意义并且分布相当均匀,您可以通过让您的第一次猜测在您的项目的估计范围内更快地进行二分搜索。这可能对您的特定应用有任何意义,也可能没有任何意义。
-
如果您想简化这些内容但避免使用哈希集,请不要忘记 System.Collections.Generic.SortedList(TKey, TValue)。
标签: c# .net search collections