我有一个很大的列表(~110,000个字符串),我需要将它与类似大小的列表进行比较。
列表A来自1个系统。 列表B来自SQL表(我只能读取,没有存储过程等)
在列表B中找到列表B中不再存在的值的最佳方法是什么?
100,000个字符串是否需要在数组中处理大数?
感谢
答案 0 :(得分:26)
所以你有两个这样的列表:
List<string> listA;
List<string> listB;
然后使用Enumerable.Except
:
List<string> except = listA.Except(listB).ToList();
请注意,如果您想要忽略大小写:
List<string> except = listA.Except(listB, StringComparer.OrdinalIgnoreCase).ToList();
您可以使用您选择的IEqualityComparer<string>
替换最后一个参数。
答案 1 :(得分:9)
使用LINQ:
var missing = listA.Except(listB).ToList();
答案 2 :(得分:6)
出于兴趣,您是否必须使用List<string>
?因为在.net 3.5 SP1中,您可以使用HashSet及其ExceptWith方法。根据我的理解,HashSets专门针对两个集合之间的比较进行了优化。
答案 3 :(得分:2)
List<string> A = //get from file
List<string> B = //get from db
var C = A.Except(B);
答案 4 :(得分:1)
从this question窃取,看起来您可以使用Except<T>()
方法。