У меня есть 2 таких набора хешей.
Hash_1 = {1, 2, 3, 4, 5} Hash_2 = {4, 5, 6, 7, 8}
Я использую C #
Я хочу сравнить эти два набора и хочу получить вывод типа
Hash_3 = {1, 2, 3, 6, 7, 8}
Или вы можете использовать SymmetricExceptWith
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); } }
Исходный код здесь
То, что вы хотите: 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));
Попробуйте онлайн