C#中的通用Map/Reduce列表扩展公共委托RReduceFunction(Tt,Rprevious);publicdelegatevoidTransformFunction(Tt,paramsobject[]args);publicstaticRReduce(thisListlist,ReduceFunctionr,Rinitial){varaggregate=initial;foreach(列表中的vart)聚合=r(t,聚合);返回聚合;}publicstaticvoidTransform(thisListlist,TransformFunctionf,paramsobject[]args){foreach(vartinlist)f(t,args);}转换函数会缩减成这样:foreach(vartinlist)if(conditions&&moreconditions)//doworketc这样有意义吗?会更好吗?这些看起来与Linq中的扩展非常相似://采用与Func委托匹配的函数listInstance.Aggregate(startingValue,(x,y)=>/*聚合两个后续值*///接受一个匹配Action委托的函数listInstance.ForEach(x=>/*dosomethingwithx*/);为什么第二个例子叫做Transform?您是否打算以某种方式更改列表中的值?如果是这种情况,您最好使用ConvertAll或Select。根据此链接,C#3.0中的函数式编程:Map/Reduce/Filter如何震撼您的世界这是System.Linq命名空间中的C#等价物:我会改用内置的Func委托。同样的代码适用于任何IEnumerable。您的代码将变为:publicstaticRReduce(thisIEnumerablelist,Funcr,Rinitial){varaggregate=initial;foreach(vartinlist)aggregate=r(t,aggregate);返回聚合;}publicstaticvoidTransform(thisIEnumerablelist,Funcf){foreach(vartinlist)f(t);你可能想添加一个方法来执行映射但返回一个新列表而不是处理传入的列表(并且返回一个列表可以证明对链接其他操作有用)......如果你想要的话可??能是一个带有布尔值的重载版本返回一个新的列表,如下:以上是C#学习教程:GenericMap/ReduceListExtensionsinC#如果分享的所有内容对你有用,需要了解更多C#学习教程,希望大家多多支持更多关注它——publicstaticListTransform(thisListlist,TransformFunctionf,paramsobject[]args){returnTransform(list,f,false,args);}publicstaticListTransform(thisListlist,TransformFunctionf,boolcreate,paramsobject[]args){//如果create为真,则添加代码以创建(抱歉,//懒得实际编写代码)foreach(vart在列表中)f(t,args);返回列表;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
