如果其中一个列表将为空,如何交叉多个列表
本文关键字:列表 何交叉 一个 如果 | 更新日期: 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
}