📜  LINQ Aggregate()函数(1)

📅  最后修改于: 2023-12-03 15:02:41.361000             🧑  作者: Mango

LINQ Aggregate()函数

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()方法默认启用延迟执行,即不会立即执行查询,而是在实际需要结果时才执行查询。