【问题标题】:I want to compare 2 hash sets and take out the differences我想比较 2 个哈希集并找出差异
【发布时间】: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}

【问题讨论】:

    标签: c# hashset


    【解决方案1】:

    或者你可以使用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);
       }
    }
    

    Source Code here

    【讨论】:

    • 哦。想要。我喜欢!
    • @John 是的,实际上之前从未使用过它,那是我的第一个牛仔竞技表演
    【解决方案2】:

    你想要的是:没有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));
    

    Try it online

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多