【问题标题】:comparing two int arrays and printing out the difference [duplicate]比较两个int数组并打印出差异[重复]
【发布时间】:2018-07-10 18:54:46
【问题描述】:

重复问题。

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

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

我预计结果为 { 20, 55 }。

【问题讨论】:

  • 您想将数组视为集合还是序列?如果您的两个数组是{ 1, 2, 3 }{ 3, 2, 1 },您是否要报告第一个和最后一个元素的差异?数组总是相同的长度吗?
  • 您想将每个元素与另一个数组中相同索引中的元素进行比较,或者位置无关紧要,并且您想要一个元素而不是另一个元素?根据您的答案是 Daisy 还是 D-Shih 答案

标签: c#


【解决方案1】:

您目前正在将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]);
    }
}

使用 LINQ,您可以改用 Zip 来执行此操作(以及元组和内插字符串文字...):

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}");
}

【讨论】:

  • 非常感谢黛西。这就是我一直在寻找的。​​span>
  • @ChrisH.:在那种情况下,我很困惑为什么你接受了另一个答案,它没有做同样的事情。如果另一个答案对你有用,那么这个答案不会,反之亦然......
【解决方案2】:

您可以尝试使用 linq Except 从两个数组中获取不同,然后使用 Union 合并两个数组。

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

c# online

【讨论】:

  • 也许吧。这会将输入视为集合而不是序列......目前还不清楚 OP 想要什么。
猜你喜欢
  • 2019-05-15
  • 2019-08-03
  • 1970-01-01
  • 2013-06-17
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多