联合计数两个HashSet

时间:2017-03-26 17:03:11

标签: c# .net

有两个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();

有更优雅的解决方案吗?

2 个答案:

答案 0 :(得分:4)

使用ImmutableHashSet

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

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

答案 1 :(得分:2)

另一种快速但非内存有效的方法是您可以创建hashSet的副本然后执行union

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