Return 来自两个列表的独占元素使用 linq 出现超过两次
Return exclusive elements from two lists that comes more than twice using linq
我有两个列表:
int[] List1 = { 10, 10029, 30, 30, 10030 };
int[] List2 = { 14,22,23,24,25,26,2728,29,10029,10030 };
和下面的语句,
var NewList = List1.Except(List2);
returns
10
30
但我希望输出包含已复制的独占元素。所以,
10
30
30
具有您正在寻找的语义的 LINQ:
var newList = List1.Where(x => !List2.Contains(x));
请注意,这是列表大小的二次方。如果列表很大,那么这可能需要很长时间。为了缓解这种情况,您可以先将另一个列表变成一个集合,以便快速查找:
var list2AsSet = List2.ToHashSet();
var newList = List1.Where(x => !list2AsSet.Contains(x));
使用Contains
方法判断元素是否存在于第二个列表
int[] List1 = { 10, 10029, 30, 30, 10030 };
int[] List2 = { 14,22,23,24,25,26,2728,29,10029,10030 };
var exclusive = List1.Where(x => !List2.Contains(x));
foreach (var el in exclusive){
Console.WriteLine(el);
}
更多关于 Contains
- https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.contains?view=net-6.0
我有两个列表:
int[] List1 = { 10, 10029, 30, 30, 10030 };
int[] List2 = { 14,22,23,24,25,26,2728,29,10029,10030 };
和下面的语句,
var NewList = List1.Except(List2);
returns
10
30
但我希望输出包含已复制的独占元素。所以,
10
30
30
具有您正在寻找的语义的 LINQ:
var newList = List1.Where(x => !List2.Contains(x));
请注意,这是列表大小的二次方。如果列表很大,那么这可能需要很长时间。为了缓解这种情况,您可以先将另一个列表变成一个集合,以便快速查找:
var list2AsSet = List2.ToHashSet();
var newList = List1.Where(x => !list2AsSet.Contains(x));
使用Contains
方法判断元素是否存在于第二个列表
int[] List1 = { 10, 10029, 30, 30, 10030 };
int[] List2 = { 14,22,23,24,25,26,2728,29,10029,10030 };
var exclusive = List1.Where(x => !List2.Contains(x));
foreach (var el in exclusive){
Console.WriteLine(el);
}
更多关于 Contains
- https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.contains?view=net-6.0