我想比较2个哈希集并找出差异

max*_*ena 6 c# hashset

我有2个这样的哈希集。

Hash_1 = {1, 2, 3, 4, 5}
Hash_2 = {4, 5, 6, 7, 8}
Run Code Online (Sandbox Code Playgroud)

我正在使用C#

我想比较这两个集合,并希望得到类似的输出

Hash_3 = {1, 2, 3, 6, 7, 8}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 5

你想要的是:没有Hash_2的Hash_1,没有Hash_1的Hash_2,然后组合成一组。

所以让我们从没有 Hash_2 的 Hash_1 开始:

var modified1 = Hash_1.Except(Hash_2);
Run Code Online (Sandbox Code Playgroud)

然后是没有 Hash_1 的 Hash_2:

var modified2 = Hash_2.Except(Hash_1);
Run Code Online (Sandbox Code Playgroud)

现在让我们将它们结合起来:

var result = modified1.Concat(modified2);
Run Code Online (Sandbox Code Playgroud)

或者简而言之:

var result = Hash_1.Except(Hash_2).Concat(Hash_2.Except(Hash_1));
Run Code Online (Sandbox Code Playgroud)

网上试试


AAA*_*ddd 5

或者你可以使用 SymmetricExceptWith

修改当前HashSet对象,使其仅包含该对象或指定集合中存在的元素,但不能同时包含两者。

var h1 = new HashSet<int>() { 1, 2, 3, 4, 5 };
var h2 = new HashSet<int>() { 4, 5, 6, 7, 8 };

h1.SymmetricExceptWith(h2);

Console.WriteLine(string.Join(",", h1));
Run Code Online (Sandbox Code Playgroud)

输出量

1,2,3,7,6,8
Run Code Online (Sandbox Code Playgroud)

内部使用

foreach (T item in other)
{
   if (!Remove(item))
   {
      AddIfNotPresent(item);
   }
}
Run Code Online (Sandbox Code Playgroud)

源代码在这里

  • 哦 看中。我喜欢! (2认同)