我正在比较两个充满文件名的哈希集。我已经成功实现了“ExceptWith”,但现在我需要获得“两个集合中所有文件名”的列表。
我知道hashset有一个包含但这意味着为另一个的每个项循环hashset。 想知道是否有内置方法来做到这一点。 我正在使用超过50000个文件名的文件。
非常感谢答案 0 :(得分:3)
你所说的是一个集合交集。有一个内置的方法:
HashSet<string> x = new HashSet<string> { "x", "a","b"};
HashSet<string> y = new HashSet<string> { "z", "a","b"};
x.IntersectWith(y);
请注意,这会修改原始HashSet x
。如果您不想这样,请在Enumerable上使用扩展方法:
var intersection = x.Intersect(y);
由于最后一个被定义为IEnumerable<T>
的扩展名,因此它也适用于更一般的情况。请注意,它可能不像HashSet<T>.IntersectWith
那样对性能进行优化,因为它需要能够处理所有可用的数据。