标准函数,用于迭代累加,同时产生相关值

时间:2014-07-25 19:27:28

标签: c# functional-programming nomenclature

有一种特殊的计算方式偶尔出现,我不知道如何很好地转换为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());

是否有一个标准名称,用于“累积,同时产生相关值”功能?要使用的标准功能吗?

1 个答案:

答案 0 :(得分:0)

MoreLINQ调用此操作Scan