两个集合中的任何交集

时间:2012-05-16 22:05:28

标签: c# linq collections

我必须找出两个集合是否有任何交集,我这样做的方式是使用LINQ的“Join”来获取两个集合的交集,然后我使用“Any”。但我想知道,还有其他更“优雅”的做法吗?

4 个答案:

答案 0 :(得分:17)

Enumerable.Intersect可能就是你要找的东西。

来自MSDN:

int[] id1 = { 44, 26, 92, 30, 71, 38 };
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };
IEnumerable<int> both = id1.Intersect(id2);
if(both.Any())...

答案 1 :(得分:12)

bool intersects = collection1.Intersect(collection2).Any();

这假设集合成员的相等和哈希码的“适当”实现(例如基元的情况),否则您可以传递自定义IEqualityComparer

答案 2 :(得分:2)

以下是我们使用的扩展方法:

public static bool IntersectAny<T>(this IEnumerable<T> first, IEnumerable<T> second, IEqualityComparer<T> comparer = null) {
    return first.Intersect(second, comparer).Any();
}

答案 3 :(得分:0)