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

Don*_*nio 14 c# linq

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

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

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

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

谢谢

jas*_*son 26

所以你有两个这样的列表:

List<string> listA;
List<string> listB;
Run Code Online (Sandbox Code Playgroud)

然后使用Enumerable.Except:

List<string> except = listA.Except(listB).ToList();
Run Code Online (Sandbox Code Playgroud)

请注意,如果您想要忽略大小写:

List<string> except = listA.Except(listB, StringComparer.OrdinalIgnoreCase).ToList();
Run Code Online (Sandbox Code Playgroud)

您可以使用IEqualityComparer<string>您选择的替换最后一个参数.


Mar*_*ell 9

使用LINQ:

var missing = listA.Except(listB).ToList();
Run Code Online (Sandbox Code Playgroud)


Mic*_*tum 6

出于兴趣,你必须使用List<string>?因为在.net 3.5 SP1中,您可以使用HashSet和它的ExceptWith方法.根据我的理解,HashSets专门针对两个集合之间的比较进行了优化.