C# - LINQ 互斥元素

Gic*_*ica 0 c# linq

我有一个我认为可以用 LINQ 解决的任务。问题是我对它很陌生,我只是无法正确实施我的想法。



问题:
我有两个字符串列表:

 var list1 = new List<string>{ "item1", "item2" }; <br>
 var list2 = new List<string>{ "item1", "item3", "item3", "item4" };
Run Code Online (Sandbox Code Playgroud)

目标是返回一个包含 list2 中包含在 list1中的元素的新列表,( "item3", "item4" )

Cai*_*ard 5

你是对的,这是一个简单的:

list2.Except(list1).ToList();
Run Code Online (Sandbox Code Playgroud)

尾随ToList存在是因为你说你的目标是返回一个新的 List - 但如果你要做的只是用 foreach 或其他东西枚举结果,它可以被省略

来自 juharr 的好地方;您第一个重复的 item3 就在移动网站的自动换行边界上,所以我没有注意到您的列表是 1,3,3,4

保留重复项的性能不佳的变体,适用于小列表:

list2.Where(e => !list1.Contains(e));
Run Code Online (Sandbox Code Playgroud)

应该用于大列表 1 的性能更好的版本:

var lookup = new HashSet<string>(list1);
list2.Where(e => !lookup.Contains(e));
Run Code Online (Sandbox Code Playgroud)