6个List <int>对象的交集

ani*_*lca 2 c# linq ienumerable list

正如我在标题中提到的,我手中有6个List对象.我想找到他们的交集,除了那些没有项目的人.

intersectionResultSet =
    list1.
    Intersect(list2).
    Intersect(list3).
    Intersect(list4).
    Intersect(list5).
    Intersect(list6).ToList();
Run Code Online (Sandbox Code Playgroud)

当其中一个没有项目时,通常我会得到空集.所以我想从交叉操作中排除没有项目的那些.最好的方法是什么?

提前致谢,

Dan*_*haw 11

你可以使用这样的东西:

// Your handful of lists
IEnumerable<IEnumerable<int>> lists = new[]
    {
        new List<int> { 1, 2, 3 }, 
        new List<int>(), 
        null,
        new List<int> { 2, 3, 4 }
    };

List<int> intersection = lists
    .Where(c => c != null && c.Any())
    .Aggregate(Enumerable.Intersect)
    .ToList();

foreach (int value in intersection)
{
    Console.WriteLine(value);
}
Run Code Online (Sandbox Code Playgroud)

这已经过测试并产生以下输出:

2
3

与感谢@Matajon您指出清洁(和更好的性能)使用Enumerable.IntersectAggregate功能.


Mar*_*náš 5

简单地说,也使用LINQ.

var lists = new List<IEnumerable<int>>() { list1, list2, list3, list4, list5, list6 };

var result = lists
    .Where(x => x.Any())
    .Aggregate(Enumerable.Intersect)
    .ToList();
Run Code Online (Sandbox Code Playgroud)