将IEnumerable拆分为两个

chi*_*s42 9 c# linq

我想将一个列表分成两个列表,一个可以直接处理,另一个是余数,它将通过链传递给其他处理程序.

输入:

  • 一个项目清单
  • 一种过滤方法,用于确定要包含项目的列表.

输出:

  • 一个"真实"的清单
  • 一个"虚假"的名单

这已经存在了吗?也许是我目前没想到的Linq方法?否则,有没有人有一个很好的C#示例?

Ser*_*rvy 21

这是一个简单的方法.请注意,ToLookup急切地评估输入序列.

List<int> list = new List<int> { 1, 2, 3, 4, 5, 6 };

var lookup = list.ToLookup(num => num % 2 == 0);

IEnumerable<int> trueList = lookup[true];
IEnumerable<int> falseList = lookup[false];
Run Code Online (Sandbox Code Playgroud)

您可以使用GroupBy延迟评估输入序列,但它不是漂亮:

var groups = list.GroupBy(num => num % 2 == 0);

IEnumerable<int> trueList = groups.Where(group => group.Key).FirstOrDefault();
IEnumerable<int> falseList = groups.Where(group => !group.Key).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)