C# 从一个哈希集中删除元素,而不是在另一个哈希集中?
我知道C# 从一个哈希集中删除元素,而不是在另一个哈希集中?,c#,hashset,C#,Hashset,我知道hashsetA。除了(hashsetB)从hashsetA中删除hashsetB中存在的元素。但是,我想从hashsetA中删除在hashsetB中不存在的元素 目前,我只需将hashsetA复制到新的Hashset中,然后使用ExceptWith()两次: hashsetC = new HashSet<var>(hashsetA); hashsetC.ExceptWith(hashsetB); hashsetA.ExceptWith(hashsetC); hashsetC
hashsetA。除了(hashsetB)
从hashsetA
中删除hashsetB
中存在的元素。但是,我想从hashsetA
中删除在hashsetB
中不存在的元素
目前,我只需将hashsetA
复制到新的Hashset
中,然后使用ExceptWith()
两次:
hashsetC = new HashSet<var>(hashsetA);
hashsetC.ExceptWith(hashsetB);
hashsetA.ExceptWith(hashsetC);
hashsetC=新的HashSet(hashsetA);
hashsetC.ExceptWith(hashsetB);
hashsetA.ExceptWith(hashsetC);
就我的目的而言,它的性能已经足够好了,但是我想知道是否有一种内置的方法可以使它更快/更简洁?
还是我错过了一个从集合中选择的明显方式
res = hashsetA.Where(p=> hashsetB.Contains(p)).
假设Hashset中的查找是O(1),则其总和应为O(n)
假设Hashset中的查找是O(1),则其总和应为O(n)。只需使用
简单使用
它创建了
res
,但我认为询问者想要修改hashsetA
。你没有解释如何做到这一点。执行newhashset(res)
将给出另一个集合,但不会修改hashsetA
。然后hashsetA=newhashset(res)
其中res
来自您的答案可能会有帮助,但如果其他人引用了HashSet
@JeppeStigNielsen的原始实例,则不会有帮助。是的,我同意,如果有必要修改现有HashSet,那么您的解决方案就是正确的:)如果您想使用Linq“过滤”在不更改源代码的情况下,也可以使用res=hashsetA.Intersect(hashsetB)
。它创建res
,但我认为询问者想要修改hashsetA
。你没有解释如何做到这一点。执行newhashset(res)
将给出另一个集合,但不会修改hashsetA
。然后hashsetA=newhashset(res)
其中res
来自您的答案可能会有帮助,但如果其他人引用了HashSet
@JeppeStigNielsen的原始实例,则不会有帮助。是的,我同意,如果有必要修改现有HashSet,那么您的解决方案就是正确的:)如果您想使用Linq“过滤”在不更改源代码的情况下,也可以使用res=hashsetA.Intersect(hashsetB)代码>。这太完美了,谢谢!我的集合论显然已经很生疏了,以至于在需要的时候无法发现交叉点!这太完美了,谢谢!我的集合论显然已经很生疏了,以至于在需要的时候无法发现交叉点!
hashsetA.IntersectWith(hashsetB);