c# Linq Aggregate()累加函数的用法

   日期:2024-12-26    作者:pdzzb 移动:http://mip.riyuangf.com/mobile/quote/52171.html

Enumerable.Aggregate 扩展方法在System.Linq命名空间中,是Enumerable类的第一个方法(按字母顺序排名,但确是Enumerable里面相对复杂的方法。
MSDN对它的说明是:对序列应用累加器函数。备注中还有一些说明,大意是这个方法比较复杂,一般情况下用Sum、Max、Min、Average就可以了。
看看下面的代码,有了Sum,谁还会用Aggregate呢

 
Aggregate是对序列应用累加器的函数。

同是求和,Sum不再需要额外参数,而Aggregate确还要将一个lambda作为参数。因为用起来麻烦,操作太低级,Aggregate渐渐被大多人忽视了…
实际上Aggregate因为“低级”,功能确是很强大的,通过它可以简化很多聚合运算。

首先来看对Aggregate组装字符串的问题

 

输出结果是:Able was I ere I saw Elba (注:出自《大国崛起》,狄娜最后讲述了拿破仑一句经典)。
当然考虑性能的话还是用StringBuilder吧,这里主要介绍用法。这个Sum做不到吧

同理 例如我们这样的一个list集合,我们想要得到

"张三 哈哈哈 李四 哈哈哈 王麻子 "
这样的一个结果;
假如我们没有linq,我们该怎么去写这个代码呢
可能和下面这段代码没有多少出入

 

那如果使用linq的扩展方法Aggregate就显得简单的多了

 

Aggregate还可以将所有字符串倒序累加,配合String.Reverse扩展可以实现整个句子的倒序输出:

 

看下面,输出结果好像不太对

正常:Able was I ere I saw Elba
倒置:able was I ere I saw Alba

怎么中间的都一样,两的单词首尾字母大小写发生转换了呢?!
仔细看看吧,不是算法有问题,是输入“有问题”。搜索一下“Able was I ere I saw Elba”,这可是很有名的英文句子噢

Aggregate还可以实现异或(^)操作

 

实现查找重复最优算法 + 最终极限算法 中最后提出的“最终极限算法”,用上这里改进的Aggregate扩展

 

再举例加深理解

 

过程如下

(((1*2+2)*2+3)*2+4)*2+5=57

所以可以得出结论Aggregate累加器接收到的第一个元素作为paramA,以后接收的元素都存在paramB与paramA进行运算,并且运算结果存在paramA中后与新的paramB进行下一轮计算

文章截取自


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号