可能重复:
LINQ在两个列表中找到差异
我想找到2系列之间的区别.所以我Except在LINQ语句中使用.但Except似乎只有在第一个集合长于第二个集合时才有效.例如,即使2个集合不同,也不会返回任何结果.
double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
double[] numbers2 = { 2.2 };
IEnumerable<double> onlyInFirstSet = numbers2.Except(numbers1);
Run Code Online (Sandbox Code Playgroud)
任何人都可以确认是否是这种情况?如果是这样,在编写查询之前是否必须检查集合长度,因为我不知道哪个集合在编译时会更大.
编辑
我想我的问题并不清楚.我不关心哪个集合包含什么.我只是想找到两个系列之间的区别.我怎样才能做到这一点?
小智 49
取自101 LINQ样品:
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
IEnumerable<int> aOnlyNumbers = numbersA.Except(numbersB);
Console.WriteLine("Numbers in first array but not second array:");
foreach (var n in aOnlyNumbers)
{
Console.WriteLine(n);
}
Run Code Online (Sandbox Code Playgroud)
结果
第一个数组中的数字但不是第二个数组:0 2 4 6 9
其他答案告诉您如何从另一组数字中删除一组数字。阅读您的问题,我想您想知道第一个是什么,而不是第二个,反之亦然:
var numbers1 = new [] { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
var numbers2 = new [] { 2.2, 2.8 };
var intersect = numbers1.Intersect(numbers2);
var diff = numbers1.Concat(numbers2).Except(intersect);
Run Code Online (Sandbox Code Playgroud)