【发布时间】:2013-12-01 16:45:48
【问题描述】:
我正在比较 2 个充满文件名的哈希集。我已经成功实现了“ExceptWith”,但现在我需要获取“两个集中的所有文件名”的列表。
我知道hashset 有一个contains ,但这意味着循环hashset 为另一个项目的每个项目。 想知道是否有内置的方法可以做到这一点。 我正在处理超过 50000 个文件名的文件。
非常感谢
【问题讨论】:
标签: c#
我正在比较 2 个充满文件名的哈希集。我已经成功实现了“ExceptWith”,但现在我需要获取“两个集中的所有文件名”的列表。
我知道hashset 有一个contains ,但这意味着循环hashset 为另一个项目的每个项目。 想知道是否有内置的方法可以做到这一点。 我正在处理超过 50000 个文件名的文件。
非常感谢
【问题讨论】:
标签: c#
你说的是一个固定的交叉点。有一个内置的方法:
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 优化,因为它需要能够处理所有可枚举。
【讨论】: