【发布时间】:2019-05-31 05:29:49
【问题描述】:
我有 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 个这样的哈希集。
Hash_1 = {1, 2, 3, 4, 5}
Hash_2 = {4, 5, 6, 7, 8}
我正在使用 C#
我想比较这两组并希望得到类似的输出
Hash_3 = {1, 2, 3, 6, 7, 8}
【问题讨论】:
或者你可以使用SymmetricExceptWith
修改当前的
HashSet<T>对象以仅包含以下元素 存在于该对象或指定的集合中,但 不是两者兼而有之。
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_2的Hash_1,没有Hash_1的Hash_2,然后组合成一个集合。
让我们从没有 Hash_2 的 Hash_1 开始:
var modified1 = Hash_1.Except(Hash_2);
然后是没有 Hash_1 的 Hash_2:
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));
【讨论】: