Enumerable.Aggregate
2011-01-02 21:27
169 查看
学习字符串解析的时候看到cnblog上老赵的一段很经典的编程题,里面的这样一个方法,觉得很强大,转载过大共同学习研究
Enumerable.Aggregate 扩展方法在System.Linq命名空间中,是Enumerable类的第一个方法(按字母顺序排名),但确是Enumerable里面相对复杂的方法。
MSDN对它的说明是:对序列应用累加器函数。备注中还有一些说明,大意是这个方法比较复杂,一般情况下用Sum、Max、Min、Average就可以了。
看看下面的代码,有了Sum,谁还会用Aggregate呢!
public static void Test1()
{
int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sum1 = nums.Sum();
int sum2 = nums.Aggregate((i,j)=>i+j);
}
同是求和,Sum不再需要额外参数,而Aggregate确还要将一个lambda作为参数。因为用起来麻烦,操作太低级,Aggregate渐渐被大多人忽视了...
实际上Aggregate因为“低级”,功能确是很强大的,通过它可以简化很多聚合运算。
首先来看对Aggregate组装字符串的问题:
public static void Test2()
{
string[] words = new string[] { "Able", "was", "I", "ere", "I", "saw", "Elba"};
string s = words.Aggregate((a, n) => a + " " + n);
Console.WriteLine(s);
}
输出结果是:Able was I ere I saw Elba
Enumerable.Aggregate 扩展方法在System.Linq命名空间中,是Enumerable类的第一个方法(按字母顺序排名),但确是Enumerable里面相对复杂的方法。
MSDN对它的说明是:对序列应用累加器函数。备注中还有一些说明,大意是这个方法比较复杂,一般情况下用Sum、Max、Min、Average就可以了。
看看下面的代码,有了Sum,谁还会用Aggregate呢!
public static void Test1()
{
int[] nums = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sum1 = nums.Sum();
int sum2 = nums.Aggregate((i,j)=>i+j);
}
同是求和,Sum不再需要额外参数,而Aggregate确还要将一个lambda作为参数。因为用起来麻烦,操作太低级,Aggregate渐渐被大多人忽视了...
实际上Aggregate因为“低级”,功能确是很强大的,通过它可以简化很多聚合运算。
首先来看对Aggregate组装字符串的问题:
public static void Test2()
{
string[] words = new string[] { "Able", "was", "I", "ere", "I", "saw", "Elba"};
string s = words.Aggregate((a, n) => a + " " + n);
Console.WriteLine(s);
}
输出结果是:Able was I ere I saw Elba
相关文章推荐
- [Linq] Enumerable.Aggregate[转载]
- Enumerable..::.Aggregate)>) 方法 (IEnumerable)>), Func)>))
- AggregateCacheDependency、CacheDependency、SqlCacheDependency
- AggregateCacheDependency、CacheDependency、SqlCacheDependency
- 7、步步为营VS 2008 + .NET 3.5(7) - LINQ查询操作符之First、FirstOrDefault、Last、LastOrDefault、ElementAt、ElementAtOrDefault、Contains、Any、All、Count、LongCount、Sum、Min、Max、Average、Aggregate、Cast、DefaultIfEmpty、SequenceEqual、OfType、ToArray、ToList、ToDictionary
- 4.1.3 何为聚合(aggregate)?
- c#扩展方法奇思妙用高级篇二:Aggregate扩展其改进
- c#扩展方法奇思妙用高级篇二:Aggregate扩展其改进
- C# Freely convert between IList<T> and IEnumerable<T>
- IEnumerable & IEnumerator
- How to Bind Silverlight DataGrid From IEnumerable of IDictionary by Transforming Each Dictionary Key
- SORT AGGREGATE
- C#--- IEnumerable<T>和yield return的使用
- Enumerable.Single和Enumerable.SingleOrDefault方法
- 理解PGA(2)pga_aggregate_target详解 .
- mysqldumpslow bug— does not aggregate times
- C# IEnumerable<T>、IEnumerator<T>、List<T>、ArrayList、[]数组各各的区别
- hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()的用法
- PGA突破pga_aggregate_target限制
- javascript的创建对象object.create()和属性检测hasOwnPrototype()和propertyIsEnumerable()