当前位置:  开发笔记 > 编程语言 > 正文

C#中的通用Map/Reduce List Extensions

如何解决《C#中的通用Map/ReduceListExtensions》经验,为你挑选了2个好方法。

我正在编写一些扩展来模仿地图并减少Lisp中的函数.

public delegate R ReduceFunction(T t, R previous);
public delegate void TransformFunction(T t, params object[] args);

public static R Reduce(this List list, ReduceFunction r, R initial)
{
     var aggregate = initial;
     foreach(var t in list)
         aggregate = r(t,aggregate);

     return aggregate;
}
public static void Transform(this List list, TransformFunction f, params object [] args)
{
    foreach(var t in list)
         f(t,args);
}

转换功能将减少如下:

foreach(var t in list)
    if(conditions && moreconditions)
        //do work etc

这有意义吗?会更好吗?



1> Ray Vega..:

根据这个链接C#3.0中的函数编程:Map/Reduce/Filter如何可以摇滚你的世界以下是System.Linq命名空间中C#的等价物:

map - > Enumerable.Select

reduce - > Enumerable.Aggregate

过滤器 - > Enumerable.Where



2> Keith..:

这些看起来非常类似于Linq中的扩展:

//takes a function that matches the Func delegate
listInstance.Aggregate( 
    startingValue, 
    (x, y) => /* aggregate two subsequent values */ );

//takes a function that matches the Action delegate
listInstance.ForEach( 
    x => /* do something with x */);

为什么第二个例子叫做Transform?你打算以某种方式更改列表中的值吗?如果是这种情况你可能最好使用ConvertAllSelect.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有