c# – LINQ相交,多个列表,一些空

前端之家收集整理的这篇文章主要介绍了c# – LINQ相交,多个列表,一些空前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图找到一个与LINQ的交点.

样品:

List<int> int1 = new List<int>() { 1,2 };
List<int> int2 = new List<int>();
List<int> int3 = new List<int>() { 1 };
List<int> int4 = new List<int>() { 1,2 };
List<int> int5 = new List<int>() { 1 };

想要返回:1,因为它存在于所有列表中..如果我运行:

var intResult= int1
            .Intersect(int2)
            .Intersect(int3)
            .Intersect(int4)
            .Intersect(int5).ToList();

它没有返回,因为1显然不在int2列表中.无论一个列表是否为空,我该如何使其工作?

使用上述示例或:

List<int> int1 = new List<int>() { 1,2 };
List<int> int2 = new List<int>();
List<int> int3 = new List<int>();
List<int> int4 = new List<int>();
List<int> int5 = new List<int>();

如何返回1& 2在这种情况下..我不知道提前的列表是否填充…

解决方法

如果您需要一个步骤,最简单的解决方案是过滤掉空列表:
public static IEnumerable<T> IntersectNonEmpty<T>(this IEnumerable<IEnumerable<T>> lists)
{
    var nonEmptyLists = lists.Where(l => l.Any());
    return nonEmptyLists.Aggregate((l1,l2) => l1.Intersect(l2));
}

然后,您可以将其用于列表或其他IEnumerables的集合:

IEnumerable<int>[] lists = new[] { l1,l2,l3,l4,l5 };
var intersect = lists.IntersectNonEmpty();

您可能更喜欢常规静态方法

public static IEnumerable<T> IntersectNonEmpty<T>(params IEnumerable<T>[] lists)
{
    return lists.IntersectNonEmpty();
}

var intersect = ListsExtensionMethods.IntersectNonEmpty(l1,l5);

猜你在找的C#相关文章