定义以下变量:
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();
或MoreLINQ
的Partition
(虽然它返回IEnumerable<T>
,而不是List<T>
):
var (listWhereTrue, listWhereFalse) = numbers.Partition(comparator);