Linq扩展方法之Aggregate 对序列应用累加器函数

Linq扩展方法之Aggregate  对序列应用累加器函数;

函数模板:// 函数名:对序列应用累加器函数。
// Parameters:参数要求
// source:要聚合的 System.Collections.Generic.IEnumerable`1。
// func:要对每个元素调用的累加器函数。
// Type parameters:参数类型
// TSource:source 中的元素的类型。
//
// Returns:累加器的最终值。
// Exceptions:
// T:System.ArgumentNullException:
// source 或 func 为 null。
// T:System.InvalidOperationException:
// source 中不包含任何元素。
public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func);
int[] numbers1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var query1 = numbers1.Aggregate((a, b) => a * b);
a的依次变更为:
a=1,a*b=1*2;
a=2,a*b=2*3;
a=6,a*b=6*4;
a=24,a*b=24*5;
a=120,a*b=120*6=720;................

// 对序列应用累加器函数。 将指定的种子值用作累加器初始值。

  public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func);

int[] numbers = { 9, 3, 5, 4, 2, 6, 7, 1, 8 }; var query = numbers.Aggregate(5, (a, b) => ((a < b) ? (a * b) : a));
a的依次变更为:
a=5,
((a < b) ? (a * b) : a)):5*9=45;
第二次时:a值为45,b 为3;
第三次此时:a值为45,b 为3;
。。。。。。。。

 自定义方法实现

 // Summary:
        //     对序列应用累加器函数。 将指定的种子值用作累加器的初始值,并使用指定的函数选择结果值。
        //
        // Parameters:
        //   source:
        //     要聚合的 System.Collections.Generic.IEnumerable`1。
        //
        //   seed:
        //     累加器的初始值。
        //
        //   func:
        //     要对每个元素调用的累加器函数。
        //
        //   resultSelector:
        //     将累加器的最终值转换为结果值的函数。
        //
        // Type parameters:
        //   TSource:
        //     source 中的元素的类型。
        //
        //   TAccumulate:
        //     累加器值的类型。
        //
        //   TResult:
        //     结果值的类型。
        //
        // Returns:
        //     已转换的累加器最终值。
        //
        // Exceptions:
        //   T:System.ArgumentNullException:
        //     source 或 func 或 resultSelector 为 null。
        public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);

 


 

posted @ 2016-05-06 21:54  ZHLBKY  阅读(676)  评论(0编辑  收藏  举报