C# 如何使用 LINQ 将列表一分为二

标签 c# list performance linq split

<分区>

我正在尝试使用 LINQ 将一个列表拆分为两个列表,而无需对“主”列表进行两次迭代。一个列表应包含 LINQ 条件为 true 的元素,另一个列表应包含所有其他元素。这有可能吗?

现在我只使用两个 LINQ 查询,因此将(巨大的)主列表迭代两次。

这是我现在正在使用的(伪)代码:

List<EventModel> events = GetAllEvents();

List<EventModel> openEvents = events.Where(e => e.Closer_User_ID == null);
List<EventModel> closedEvents = events.Where(e => e.Closer_User_ID != null);

是否可以在不对原始列表进行两次迭代的情况下产生相同的结果?

最佳答案

您可以使用 ToLookup 扩展方法,如下所示:

 List<Foo> items = new List<Foo> { new Foo { Name="A",Condition=true},new Foo { Name = "B", Condition = true },new Foo { Name = "C", Condition = false } };

  var lookupItems = items.ToLookup(item => item.Condition);
        var lstTrueItems = lookupItems[true];
        var lstFalseItems = lookupItems[false];

关于C# 如何使用 LINQ 将列表一分为二,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54129757/

相关文章:

c# - C# 4.0 : dynamic vs RealProxy 中缺少方法的困难

python - 如何将子列表计算的结果追加到子列表中?

你能把 ASCII 码转换成 C 中的字符吗?

c# - .Net - 什么时候 List<T>.ForEach 优于标准的 foreach 循环?

java - Hibernate 关系映射/加速批量插入

c# - 如何使用 LINQ 从列表中获取逗号分隔的值列表?

c# - 我可以缓存 WaitForEndOfFrame 还是应该每次都使用 yield new ?

Python - 多项选择标记解析

html - 在水平无序列表中悬停时更改背景颜色?

c# - 从 WPF DataGrid 复制的数据上的无关换行符