在C#中获取两个数组之间的"差异"?

Mic*_*ael 59 c# arrays

假设我有这两个数组:

var array1 = new[] {"A", "B", "C"};
var array2 = new[] {"A", "C", "D"};
Run Code Online (Sandbox Code Playgroud)

我想得到两者之间的差异.我知道我可以用几行代码编写这个,但我想确保我没有错过内置语言功能或LINQ扩展方法.

理想情况下,我最终会得到以下三个结果:

  • 不在array1中的项目,但在array2("D")中
  • 不在array2中的项目,但在array1("B")中
  • 两者中的项目

提前致谢!

Jon*_*eet 107

如果你有LINQ可用,你可以使用ExceptDistinct.您在问题中要求的集合分别为:

- array2.Except(array1)
- array1.Except(array2)
- array1.Intersect(array2)
Run Code Online (Sandbox Code Playgroud)

  • (当我说"set"时我的意思是"哈希集".) (3认同)
  • 不,它不会制作排序的副本。它从排除的序列创建一个集合,然后迭代源序列,生成不在排除的序列中的任何元素。 (2认同)

Mua*_*Dib 12

来自MSDN 101 LINQ样本 ....

public void Linq52() {
    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)