如果其中一个列表将为空,如何交叉多个列表

本文关键字:列表 何交叉 一个 如果 | 更新日期: 2023-09-27 18:00:52

我使用c#中的一些条件列出了一些列表。。因此,如果任何条件为false,则列表保持为空。。但我仍然需要将它与其他列表进行交叉,以获得最终输出。。有什么建议吗?

如果其中一个列表将为空,如何交叉多个列表

作为简单的静态方法:

static IEnumerable<T> Intersect<T>(params IEnumerable<T>[] lists)
{
    return lists.Where(l => l.Any()).Aggregate((l1, l2) => l1.Intersect(l2));
}

你可以像一样使用它

var list1 = new List<string>() { "abc", "cde" };
var list2 = new List<string>() { "abc", "xyz" };
var list3 = new List<string>();
var arrayOfLists = new List<string>[] {list1, list2, list3};
var paramList= Intersect(list1, list2, list3);
var arrayList = Intersect(listOfLists);

小心传递数组而不是列表,否则T是返回原始列表的list。

因此,在您拥有所有列表后,将它们放入一个数组中,然后您可以按照下面的示例(假设您拥有所有字符串列表(

        var list1 = new List<string>();
        var list2 = new List<string>();
        var list3 = new List<string>();
        var allLists = new List<string>[] { list1, list2, list3 };
        // need to be sure you have >= 1 list(s)
        var result = allLists[0];
        for (int i = 1; i < allLists.Length; i++)
        {
            result = result.Intersect(allLists[i]).ToList();
        }
        // ok, you get the result

Enumerable.Intersect允许您执行此操作,即使一个IEnumerable<T>为空。

然而,只要至少有一个空列表,交集结果就会一直是空的——这就是你需要的吗?

如果我理解正确,您可以使用Count属性

List<Object> your_list = new List<Object>();
if(your_list.Count!=0){
// do your stuff
}
else{
//skip
}