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.Intersect的Aggregate功能.
简单地说,也使用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)
| 归档时间: |
|
| 查看次数: |
3023 次 |
| 最近记录: |