使用C#和LINQ比较两个大型字符串列表的最佳方法是什么?

时间:2010-01-13 20:38:23

标签: c# linq

我有一个很大的列表(~110,000个字符串),我需要将它与类似大小的列表进行比较。

列表A来自1个系统。 列表B来自SQL表(我只能读取,没有存储过程等)

在列表B中找到列表B中不再存在的值的最佳方法是什么?

100,000个字符串是否需要在数组中处理大数?

感谢

5 个答案:

答案 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>()方法。