Вопрос по c#, linq – Любое пересечение в двух коллекциях

13

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

Ваш Ответ

4   ответа
16

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())...
Спасибо! я очень ценю это :) Bongo Sharp
2

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

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

Пожалуйста, посмотрите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 будет весьма полезно

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

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

Похожие вопросы