2012-05-16 3 views
11

Мне нужно выяснить, имеют ли две коллекции какое-либо пересечение, как я это сделал, используя LINQ «Join», чтобы получить пересечение двух коллекций, а затем я использую «Any». Но мне интересно, есть ли еще более «элегантный» способ сделать это?Любое пересечение в двух коллекциях

ответ

14

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())... 
+0

Спасибо! я очень ценю это :) –

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

Это предполагает «соответствующий» осуществление равенства и хэш-код для членов вашей коллекции (это, например, в случае примитивов), в противном случае вы можете передать пользовательские IEqualityComparer ,

1

Вот метод расширения, который мы используем:

public static bool IntersectAny<T>(this IEnumerable<T> first, IEnumerable<T> second, IEqualityComparer<T> comparer = null) { 
    return first.Intersect(second, comparer).Any(); 
} 
Смежные вопросы