在产生相关值的同时进行迭代累积的标准函数
本文关键字:迭代 函数 标准 | 更新日期: 2023-09-27 18:14:59
有一种特殊的计算方式不时出现,我不知道如何很好地转化为map/filter/reduce。我想知道是否有一个标准的函数式函数来完成它,或者什么是一个好名字。
基本上,你会发现自己在每一站都听从指示,同时放弃东西。下面是一个c#函数,展示了总体思路:
public static IEnumerable<TOut> streamAggregateMap<TDif, TAcc, TOut>(
this IEnumerable<TDif> difs,
TAcc seed,
Func<TAcc, TDif, TAcc> accumulator,
Func<TAcc, TDif, TOut> selector) {
var acc = seed;
foreach (var dif in difs) {
yield return selector(acc, dif);
acc = accumulator(acc, dif);
}
}
您可以使用它来跟踪树,同时生成值:
var vals = goLeftDirections.streamAggregateMap(
root,
(node, goLeft) => goLeft ? node.left : node.right,
(node, goLeft) => node.value);
或者告诉你迭代地乘以2并加上一些偏移量得到的数的质因数分解,除了这些因数分解是不乘以2的偏移量的数:
var factorizations = offsets.streamAggregateMap(
1,
(total, offset) => total * 2 + offset,
(total, offset) => (total + offset).Factorize());
这个"在产生相关值的同时积累"功能是否有一个标准名称?要使用的标准函数?
MoreLINQ将此操作称为Scan.