14

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

4

4 回答 4

20

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())...
于 2012-05-16T22:06:52.230 回答
12
bool intersects = collection1.Intersect(collection2).Any();

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

于 2012-05-16T22:07:03.943 回答
2

这是我们使用的扩展方法:

public static bool IntersectAny<T>(this IEnumerable<T> first, IEnumerable<T> second, IEqualityComparer<T> comparer = null) {
    return first.Intersect(second, comparer).Any();
}
于 2016-09-16T13:50:05.773 回答
-1

请查看http://msdn.microsoft.com/en-us/library/system.linq.enumerable.aspx和更多详细信息,我刚刚发现http://www.codeproject.com/Articles/383749/How- does-it-work-in-Csharp-Part-3-Csharp-Linq-in-d会很有帮助。

于 2012-05-17T00:24:35.000 回答