Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从一个哈希集中删除元素,而不是在另一个哈希集中?_C#_Hashset - Fatal编程技术网

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);