聚合操作執行數學的運算,如平均數、合計、總數、最大值、最小值
Method | Description |
---|---|
Aggregate | 在集合上執行自定義聚集操作 |
Average | 求平均數 |
Count | 求集合的總數 |
LongCount | 求集合的總數 |
Max | 最大值 |
Min | 最小值 |
Sum | 總數 |
public static TSource Aggregate<TSource>(this IEnumerable<TSource> source, Func<TSource, TSource, TSource> func); public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func); public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);
Aggregate接受2個參數,一般第一個參數是稱為累積數(默認情況下等於第一個值),而第二個代表了下一個值。第一次計算之后,計算的結果會替換掉第一個參數,繼續參與下一次計算。
public static TAccumulate Aggregate<TSource, TAccumulate>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func);
seed作為種子值進行累加
// Student collection IList<Student> studentList = new List<Student>>() { new Student() { StudentID = 1, StudentName = "John", Age = 13} , new Student() { StudentID = 2, StudentName = "Moin", Age = 21 } , new Student() { StudentID = 3, StudentName = "Bill", Age = 18 } , new Student() { StudentID = 4, StudentName = "Ram" , Age = 20} , new Student() { StudentID = 5, StudentName = "Ron" , Age = 15 } }; string commaSeparatedStudentNames = studentList.Aggregate<Student, string>( "Student Names: ", // seed value (str, s) => str += s.StudentName + "," ); Console.WriteLine(commaSeparatedStudentNames);
第三個參數對結果進行構造返回
public static TResult Aggregate<TSource, TAccumulate, TResult>(this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func, Func<TAccumulate, TResult> resultSelector);
IList<Student> studentList = new List<Student>>() { new Student() { StudentID = 1, StudentName = "John", Age = 13} , new Student() { StudentID = 2, StudentName = "Moin", Age = 21 } , new Student() { StudentID = 3, StudentName = "Bill", Age = 18 } , new Student() { StudentID = 4, StudentName = "Ram" , Age = 20} , new Student() { StudentID = 5, StudentName = "Ron" , Age = 15 } }; string commaSeparatedStudentNames = studentList.Aggregate<Student, string,string>( String.Empty, // seed value (str, s) => str += s.StudentName + ",", // returns result using seed value, String.Empty goes to lambda expression as str str => str.Substring(0,str.Length - 1 )); // result selector that removes last comma Console.WriteLine(commaSeparatedStudentNames);