Я хочу сравнить 2 набора хешей и вывести различия - PullRequest
6 голосов
/ 31 мая 2019

У меня есть 2 таких набора хешей.

Hash_1 = {1, 2, 3, 4, 5}
Hash_2 = {4, 5, 6, 7, 8}

Я использую C #

Я хочу сравнить эти два набора и хочу получить вывод типа

Hash_3 = {1, 2, 3, 6, 7, 8}

Ответы [ 2 ]

5 голосов
/ 31 мая 2019

Или вы можете использовать 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));

Выход

1,2,3,7,6,8

Внутренне его просто использует

foreach (T item in other)
{
   if (!Remove(item))
   {
      AddIfNotPresent(item);
   }
}

Исходный код здесь

4 голосов
/ 31 мая 2019

То, что вы хотите: Hash_1 без Hash_2 и Hash_2 без Hash_1, затем объединенные в один набор.

Итак, давайте начнем с Hash_1 без Hash_2:

var modified1 = Hash_1.Except(Hash_2);

, а затем Hash_2 безHash_1:

var modified2 = Hash_2.Except(Hash_1);

А теперь давайте скомбинируем их:

var result = modified1.Concat(modified2);

Или вкратце:

var result = Hash_1.Except(Hash_2).Concat(Hash_2.Except(Hash_1));

Попробуйте онлайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...