C# 比较两个int数组并打印出差异

C# 比较两个int数组并打印出差异,c#,C#,重复问题 我试着比较两个int数组,找出它们之间的差异。顺序并不重要,每个数组本身也不会有重复项。例如,我有: int[] arr1 = new int[] { 45, 26, 55, 99, 36 }; int[] arr2 = new int[] { 45, 26, 99, 20, 36 }; 我希望结果是{20,55}。您可以尝试使用linqExcept来获得不同于两个数组的结果,然后使用Union组合两个数组 var result1 = arr2.Except(arr1); var r

重复问题

我试着比较两个int数组,找出它们之间的差异。顺序并不重要,每个数组本身也不会有重复项。例如,我有:

int[] arr1 = new int[] { 45, 26, 55, 99, 36 };
int[] arr2 = new int[] { 45, 26, 99, 20, 36 };

我希望结果是{20,55}。

您可以尝试使用linq
Except
来获得不同于两个数组的结果,然后使用
Union
组合两个数组

var result1 = arr2.Except(arr1);
var result2 = arr1.Except(arr2);
var result = result1.Union(result2);

您当前正在将
arr1
中的每个元素与
arr2
中的每个元素进行比较。相反,你要根据它的外观,将它们成对地进行比较。(尽管问题有点不清楚。)

如果您希望代码只使用语言的简单方面,您可以这样做:

// TODO: Check that arr1.Length and arr2.Length are the same
for (int i = 0; i < arr1.Length; i++)
{
    if (arr1[i] != arr2[i])
    {
        Console.WriteLine("Difference at element {0}: {1} != {2}", i, arr1[i], arr2[i]);
    }
}

大概这将把输入看作集合而不是序列。。。不太清楚OP想要什么。您想将数组视为集合还是序列?如果您的两个数组是
{1,2,3}
{3,2,1}
,是否要报告第一个和最后一个元素的差异?数组的长度是否总是相同的?是否要将每个元素与另一个数组中相同索引中的元素进行比较,或者位置不相关,并且希望元素位于一个数组中而不位于另一个数组中?取决于你的答案是黛西还是D-Shih回答:谢谢你的回答。这就是我一直在寻找的。@ChrisH:在这种情况下,我不明白为什么你接受了另一个答案,而这个答案却不起作用。如果另一个答案对你有效,那么这个答案不会,反之亦然。。。
var differences = arr1.Zip(arr2, (x, y) => (x, y))
                      .Where(p => p.x != p.y);
foreach (var pair in differences)
{
    // We don't have the index at this point
    Console.WriteLine($"{pair.x} != {pair.y}");
}