有一种特殊的计算方式偶尔出现,我不知道如何很好地转换为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());
是否有一个标准名称,用于“累积,同时产生相关值”功能?要使用的标准功能吗?