如何返回比较器ienumerable使用LINQ(真假)?



定义以下变量:

List<int> numbers = new List { 0, 1, 2, 3, 4, 5 };
Func<int, bool> comparator = (int t) => { return t < 3; }
var (listWhereTrue, listWhereFalse) = /* looking for this snippet */;
/// expected output: 
/// listWhereTrue = { 0, 1, 2 }
/// listWhereFalse = { 3, 4, 5}

是否有一个LINQ组合,我可以用它来返回两个IEnumerable,其中一个传递比较器,而另一个没有?

您可以使用ToLookup:

List<int> numbers = new List<int> { 0, 1, 2, 3, 4, 5 };
Func<int, bool> comparator = t => t < 3;
var lookup = numbers.ToLookup(i => comparator(i));
var listWhereTrue = lookup[true].ToList();
var listWhereFalse = lookup[false].ToList();

MoreLINQPartition(虽然它返回IEnumerable<T>,而不是List<T>):

var (listWhereTrue, listWhereFalse) = numbers.Partition(comparator);

最新更新