【发布时间】:2012-08-11 09:38:06
【问题描述】:
我有两个字符串列表,它们都是约 300,000 行。清单 1 比清单 2 多几行。我要做的是找到清单 1 中但不在清单 2 中的字符串。
考虑到我必须比较多少个字符串,Except() 是否足够好或者有更好(更快)的东西?
【问题讨论】:
-
如果您注意到性能下降,这只是一个问题。性能问题实际上只能由您来回答,因为只有您知道对您的应用程序而言“太慢”是什么。考虑最终用户、目标平台等。
-
如果重复行不是问题,您可以使用 HashSet 和 Contains 方法。 msdn.microsoft.com/en-us/library/bb356440.aspx
-
从列表移动到哈希表,然后只使用包含似乎是快速获得非常接近最佳性能的好方法
-
IEnumerable/List.Except 已经在内部使用 [Hash]Set(这就是为什么它不保证排序并使用
IEquatable)作为标准列表..只需使用它(因为它有一个非常好的 Big-O)然后 然后 看看是否需要做任何事情.. -
(糟糕,我指的是 IEqualityComparer 而不是 IEquatable。)
标签: c# list set-difference