从一个Hashset中删除不在另一个Hashset中的元素

本文关键字:Hashset 另一个 元素 删除 一个 | 更新日期: 2023-09-27 18:09:29

我知道hashsetA.Except(hashsetB)hashsetA中删除存在于hashsetB中的元素。然而,我想从hashsetA中删除存在于hashsetB中的元素。

目前我只是复制hashsetA到一个新的Hashset,然后使用ExceptWith()两次:

hashsetC = new HashSet<var>(hashsetA);
hashsetC.ExceptWith(hashsetB);
hashsetA.ExceptWith(hashsetC);

这个性能对于我的目的来说已经足够好了,但是我想知道是否有一个内置的方法来使这个更快/更简洁?还是我遗漏了一个从集合中进行选择的明显方法?

从一个Hashset中删除不在另一个Hashset中的元素

直接使用IntersectWith方法。

hashsetA.IntersectWith(hashsetB);
res = hashsetA.Where(p=> hashsetB.Contains(p)). 

如果在Hashset中查找是O(1),那么它的和应该是O(n)。