Linq: Aggregate
Aggregate累加器
今天看东西的时候看见这么个扩展方法Aggregate(累加器)很是陌生,于是乎查了查,随手记录一下。 直接看一个最简答的版本,其他版本基本没什么区别,需要的时候可看一下
public static TSource Aggregate<TSource>( this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func )
这个方法的功能其实是对可枚举的IEnumerable<TSource>某种数据,从前两个遍历对象开始逐个,作为输入进行自定 义的操作,这个方法还是蛮有用的,看几个例子。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
private void button7_Click( object sender, EventArgs e) { string sentence = "the quick brown fox jumps over the lazy dog" ; string [] words = sentence.Split( ' ' ); Func< string , string , string > temp = test; string reversed = words.Aggregate( "" ,temp); //string reversed=words.Aggregate((workingSentence, next) =>next + " " + workingSentence); MessageBox.Show(reversed); } public string test( string para1, string para2) { return para2 + " " + para1; } |
这里我没用msdn直接提供的lambda方式,目的就是为了方便调试查看下。先给出结果吧: dog lazy the over jumps fox brown quick the
其执行过程是这样滴,第一次 para1 为the ,para2为 quick,返回了 quick the, 并且作为下次的 para1,para2 为brown ,如此依次的遍历执行下去,直至结束。
再给一个例子可以看出许多应用。计算数据中的整数的个数
1
2
3
4
5
6
|
private void button8_Click( object sender, EventArgs e) { int [] ints = { 4, 8, 8, 3, 9, 0, 7, 8, 2 }; int numEven = ints.Aggregate(0, (total, next) =>next % 2 == 0 ? total + 1 : total); MessageBox.Show( "The number of even integers is: " + numEven); } |
恩恩,这都是msdn直接给出的例子,那么很多类似的统计或者计算累的需求是不是就可以考虑下Aggregate了。
时间2014-12-03,在浏览CSDN,在上面看到一题,正好用到Aggregate,就把博客完善一下,增加一个例子。题目就不自己写了,直接给出截图了,呵呵。
下面直接给代码了。
string seed = Console.ReadLine();
Console.WriteLine("请输入n:");
int copy = Convert.ToInt32(Console.ReadLine());
long result = ;
for (int i = ; i <= copy; i++)
{
string temp = Enumerable.Repeat(seed, i).Aggregate("", (current, item) => current + item);
result += Convert.ToInt32(temp);
}
Console.WriteLine(result);
Console.ReadKey();
输出结果就不再给了。其中对Repeat不熟悉的可以参看CSDN上的例子http://msdn.microsoft.com/en-us/library/bb348899.aspx,或者本人的例子:打印星号(*)三角形(C# Linq实现)的小例子
在.NET reflector中的实现是一下函数。
好了,今天的就写到这,以后发现新的有代表性的例子时,再添加。
文章原址:http://www.cnblogs.com/superCow/p/3804134.html 作者:Super Cow
Linq: Aggregate的更多相关文章
- DataTable Group By或运算 Linq Aggregate的使用
class Program { static void Main(string[] args) { DataTable dt = new DataTable(); dt.Columns.Add(&qu ...
- 细说Linq之Aggregate
前言 Linq中有关常见的方法我们已经玩的得心应手,而对于那些少用的却是置若罔闻(夸张了点),但只有在实际应用中绞尽脑汁想出的方法还不如内置的Linq方法来的实际和简洁,不喜勿喷,怪我见识短. 通过R ...
- Linq专题之提高编码效率—— 第一篇 Aggregate方法
我们知道linq是一个很古老的东西,大家也知道,自从用了linq,我们的foreach少了很多,但有一个现实就是我们在实际应用中使用到的却是屈指可数 的几个方法,这个系列我会带领大家看遍linq,好的 ...
- Linq查询操作之聚合操作(count,max,min,sum,average,aggregate,longcount)
在Linq中有一些这样的操作,根据集合计算某一单一值,比如集合的最大值,最小值,平均值等等.Linq中包含7种操作,这7种操作被称作聚合操作. 1.Count操作,计算序列中元素的个数,或者计算满足一 ...
- LINQ标准查询操作符(三)——Aggregate、Average、Distinct、Except、Intersect、Union、Empty、DefaultIfEmpty、Range、Repeat
七.聚合操作符 聚合函数将在序列上执行特定的计算,并返回单个值,如计算给定序列平均值.最大值等.共有7种LINQ聚合查询操作符:Aggregate.Average.Count.LongCount.Ma ...
- Using LINQ Group By and String.Join() / Aggregate() in Entity Framework 3.5
linq to sql 的时候,有时候需要用到 先group 然后来个 aggregate 串连一下值, 但会总会出错,说不识别 aggregate 或者 string.join 方法 搜遍网络 一 ...
- Linq扩展方法之Aggregate 对序列应用累加器函数
Linq扩展方法之Aggregate 对序列应用累加器函数; 函数模板:// 函数名:对序列应用累加器函数. // Parameters:参数要求 // source:要聚合的 System.Col ...
- LINQ中的Aggregate用法总结
Aggregate这个语法可以做一些复杂的聚合运算,例如累计求和,累计求乘积.它接受2个参数,一般第一个参数是称为累积数(默认情况下等于第一个值),而第二个代表了下一个值.第一次计算之后,计算的结果会 ...
- Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析
Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析 一:Linq的聚合运算 1. 常见的聚合运算:Aggregate,Count, Sum, Distinct,Max, ...
随机推荐
- Java进程通讯
管道(Pipe):管道可用于具有亲缘关系进程间的通信,允许一个进程和另一个与它有共同祖先的进程之间进行通信. 创建子进程Java有两种方式 //第一种 Runtime rt = Runtime.get ...
- 查找第K小数
题目描述 查找一个数组的第K小的数,注意同样大小算一样大. 如 2 1 3 4 5 2 第三小数为3. 输入描述: 输入有多组数据.每组输入n,然后输入n个整数(1<=n<=1000), ...
- 为什么每个浏览器User-Agent都是Mozilla?真相原来是这样!
转载自简明现代魔法http://www.nowamagic.net/librarys/veda/detail/2576 故事还得从头说起,最初的主角叫NCSA Mosaic,简称Mosaic(马赛克) ...
- css秘密花园
picture元素 http://www.w3cplus.com/responsive/responsive-images-101-part-6-picture-element.htmlCHAPTER ...
- Codevs3278[NOIP2013]货车运输
3287 货车运输 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description A 国有 ...
- Oracle物化视图,物化视图日志,增量刷新同步远程数据库
1.创建DBLINK -- Drop existing database link drop public database link LQPVPUB; -- Create database link ...
- c++ 构造函数以及explicit 关键字的使用
关于构造函数中的隐式转换: 在一个类所定义的构造函数中,存在如下的用法: #pragma once #ifndef __EXERCISE__ #define __EXERCISE__ #include ...
- php表单提交--文件
创建一个文件上传表单 允许用户从表单上传文件是非常有用的. 请看下面这个供上传文件的 HTML 表单: <!doctype html> <html> <head> ...
- vue搭建开发环境
windows下搭建vue开发环境 一.安装node.js 安装 vue项目通常通过webpack工具来构建,而webpack命令的执行是依赖node.js环境,所以首先要安装node.js. n ...
- Linux之uniq命令
uniq - report or omit repeated lines 省去重复的行 参数: -i 忽略大小写字符的不同 -c 对重复的行进行记数 注意:uniq命令只会对相邻的重复的行进行去 ...