【问题标题】:Count of union two HashSet联合两个HashSet的计数
【发布时间】:2017-03-26 17:03:10
【问题描述】:

有两个 HashSet 序列。我需要计算联合的结果。 它应该是这样的:

    sequence1.UnionWith(sequence2);
    return sequence1.Count;

但我需要确保原始序列不会改变。 我使用了一个简单的搜索,但是它非常减慢程序的速度

    var newHashkSet = new HashSet<string>(sequence1);
    foreach (var s2 in sequence2.Where(s2 => newHashkSet.SingleOrDefault(x => x == s2) == null)) {
        newHashkSet.Add(s2);
    }
    return newHashkSet.Count();

有没有更优雅的解决方案?

【问题讨论】:

  • “原始序列不变”是什么意思?根据定义,哈希集是无序的。另请参阅Does HashSet preserve insertion order?
  • 我的意思是使用sequence1.UnionWith(sequence2) 后sequence1 发生变化

标签: c# .net


【解决方案1】:

使用ImmutableHashSet

https://msdn.microsoft.com/en-us/library/dn467171(v=vs.111).aspx

根据定义,不可变哈希集不会改变。当您形成两个不可变哈希集的并集时,结果是第三个​​不可变哈希集,而不是任何一个输入的突变。

【讨论】:

    【解决方案2】:

    另一种快速但不节省内存的方法是您可以创建 hashSet 的副本,然后进行联合

    var newset = new HashSet<string>(sequence1);
    newset.UnionWith(sequence2);
    netset.count
    

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 2014-06-08
      • 2016-04-14
      • 1970-01-01
      • 2020-04-16
      • 2019-06-16
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多