📅  最后修改于: 2023-12-03 15:02:41.361000             🧑  作者: Mango
Aggregate()
是一个LINQ
扩展方法。它用于将一个序列的元素聚合为单个结果。Aggregate()
方法有两种形式,Aggregate<TSource>(IEnumerable<TSource>, Func<TSource, TSource, TSource>)
和Aggregate<TSource, TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate, TSource, TAccumulate>)
。
Aggregate<TSource>(IEnumerable<TSource>, Func<TSource, TSource, TSource>)
方法Aggregate<TSource>(IEnumerable<TSource>, Func<TSource, TSource, TSource>)
方法将指定的序列聚合为单个结果。序列中的第一个元素作为累加器的初始值,并与序列中的下一个元素一起传递给指定的函数。函数的返回结果作为下一次调用该函数时的累加器值,以此类推,直到序列中的最后一个元素被处理。最后一次调用该函数的值就是该方法的返回值。
public static TSource Aggregate<TSource>(
this IEnumerable<TSource> source,
Func<TSource, TSource, TSource> func
)
int[] numbers = { 1, 2, 3, 4, 5 };
int result = numbers.Aggregate((a, b) => a + b);
Console.WriteLine(result); // Output: 15
在上面的例子中,我们将numbers
序列中的所有元素累加起来,得到了15
这个结果。
Aggregate<TSource, TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate, TSource, TAccumulate>)
方法Aggregate<TSource, TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate, TSource, TAccumulate>)
方法将指定的序列聚合为单个结果。序列中的第一个元素作为累加器的初始值,并与序列中的下一个元素一起传递给指定的函数。函数的返回结果作为下一次调用该函数时的累加器值,以此类推,直到序列中的最后一个元素被处理。最后一次调用该函数的值就是该方法的返回值。
与第一种形式不同的是,Aggregate<TSource, TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate, TSource, TAccumulate>)
方法接受一个累加器的初始值,用于开始累加过程。
public static TAccumulate Aggregate<TSource, TAccumulate>(
this IEnumerable<TSource> source,
TAccumulate seed,
Func<TAccumulate, TSource, TAccumulate> func
)
string[] words = { "this", "is", "a", "sentence" };
string result = words.Aggregate("Result: ", (current, next) => current + " " + next);
Console.WriteLine(result); // Output: Result: this is a sentence
在上面的例子中,我们将words
序列中的所有元素连接起来,得到了Result: this is a sentence
这个结果。
IEnumerable
为空,Aggregate()
方法将会抛出InvalidOperationException
异常。IEnumerable
只包含一个元素,与当且仅当没有指定累加器的初始值时,该元素将作为Aggregate()
方法的返回值。Aggregate()
方法默认启用延迟执行,即不会立即执行查询,而是在实际需要结果时才执行查询。