【发布时间】:2015-02-10 08:38:24
【问题描述】:
我需要类似于AggregateWhile 方法的东西。标准的 System.Linq.Enumerable 类不提供它。到目前为止,我一直能够利用标准的 LINQ 方法来解决我遇到的每一个问题。所以我想知道在这种情况下这是否仍然可行,或者我是否真的需要使用非标准方法扩展 LINQ。
假设的AggregateWhile 方法将遍历一个序列并应用累加器。一旦谓词返回 false,聚合将完成。结果是元素的聚合,但不包括谓词失败的元素。
这是一个例子。我们有一个List { 1, 2, 3, 4, 5 },带有一个累加器,将两个输入数字相加,还有一个谓词表明累加必须小于 12。AggregateWhile 将返回 10,因为这是 1 + 2 + 3 + 4 和加法的结果最后的 5 个将使总数超过限制。在代码中:
var list = new List<int> { 1, 2, 3, 4, 5 };
int total = list.AggregateWhile( (x, y) => x + y, a => a < 12 ); // returns 10
我需要一个纯粹的函数式解决方案,因此关闭临时变量不是一种选择。
【问题讨论】:
-
你总是可以只使用循环而不是 Linq...
-
或者看一下Aggregate的引用源,然后修改它以包含谓词。
-
@MatthewWatson 我需要使用 LINQ,它必须是纯功能的。如果您想知道原因,请查看 my blog 上的最后一个条目。
-
@Dirk 自己写方法没问题。
标签: c# linq linq-to-objects