我想找到2系列之间的区别。所以我在LINQ语句中使用Except
。但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);
有人可以确认是否是这种情况?如果是这样,在编写查询之前是否必须检查集合长度,因为我不知道在编译时哪个集合会更大。
修改
我想我的问题并不清楚。我不关心哪个集合包含什么。我只是想找到两个系列之间的区别。我怎么能这样做?
答案 0 :(得分:45)
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);
}
<强>结果强>
第一个数组中的数字但不是第二个数组: 0 2 4 6 9
答案 1 :(得分:10)
例如,这不会返回任何结果......
这是正确的。
2.2
存在于第一个集合中,因此无需返回。
它与数组的长度无关。
答案 2 :(得分:5)
其他答案告诉您如何从另一组中删除一组数字。阅读你的问题我认为你想要的是第一个而不是第二个,反之亦然:
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);