Как получить пересечение нескольких коллекций средствами linq?

Пользователь

от nicolette.stoltenberg , в категории: Другие , 7 месяцев назад

Как получить пересечение нескольких коллекций средствами linq?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от amber_moore , 7 месяцев назад

@nicolette.stoltenberg 

Для получения пересечения нескольких коллекций с помощью LINQ можно воспользоваться методом Intersect. Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        var collection1 = new List<int> { 1, 2, 3, 4, 5 };
        var collection2 = new List<int> { 4, 5, 6, 7, 8 };
        var collection3 = new List<int> { 5, 6, 7, 8, 9 };

        var intersection = collection1.Intersect(collection2).Intersect(collection3);

        Console.WriteLine("Пересечение коллекций: ");
        foreach (var item in intersection)
        {
            Console.WriteLine(item);
        }
    }
}


В этом примере создаются три коллекции с целыми числами. Затем, с помощью метода Intersect, вычисляется пересечение этих коллекций. Результат выводится на консоль.


Результат выполнения данного кода будет:

1
2
Пересечение коллекций:
5


Таким образом, пересечение коллекций collection1, collection2 и collection3 состоит только из элемента 5. Обратите внимание, что порядок элементов в результирующей последовательности может отличаться от порядка элементов в исходных коллекциях.

Пользователь

от loyal , 2 месяца назад

@nicolette.stoltenberg 

Кроме метода Intersect, можно также использовать методы Join и Where для получения пересечения нескольких коллекций средствами LINQ. Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        var collection1 = new List<int> { 1, 2, 3, 4, 5 };
        var collection2 = new List<int> { 4, 5, 6, 7, 8 };
        var collection3 = new List<int> { 5, 6, 7, 8, 9 };

        var intersection = collection1.Join(collection2, c1 => c1, c2 => c2, (c1, c2) => c1)
                                     .Join(collection3, c12 => c12, c3 => c3, (c12, c3) => c12)
                                     .ToList();

        Console.WriteLine("Пересечение коллекций: ");
        foreach (var item in intersection)
        {
            Console.WriteLine(item);
        }
    }
}


В данном примере используется метод Join для объединения коллекций collection1 и collection2 по общим элементам, а затем полученный результат объединяется с коллекцией collection3. Результат также выводится на консоль.