📜  显示 LINQ Aggregate() 方法用法的 C# 程序(1)

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

LINQ Aggregate() 方法用法

介绍

在 LINQ 中,Aggregate 方法可用于将序列的所有元素归约为单个值。 它类似于 SQL 中的 SUM()、AVG() 和 COUNT() 函数。 但它具有更多的灵活性,因为它允许使用者指定自己的归约方法来执行特定任务。 在本文中,我们将探讨 Aggregate 方法的用法。

语法

Aggregate 方法定义如下:

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

其中,

  • source:源序列
  • seed:归约初始值
  • func:归约方法,将累加器和下一个元素作为参数,返回新的累加器。
示例

我们现在来看看一个简单的示例,假设我们有一个整数列表,需要查找其总和。

List<int> numbers = new List<int> { 2, 3, 4, 5 };
int sum = numbers.Aggregate((x, y) => x + y);
Console.WriteLine(sum); // 输出:14

代码解读:

  • 首先,我们创建了一个整数列表 numbers。
  • 然后,我们使用 Aggregate 方法,并通过 lambda 表达式指定了归约方法:累加器 x 和下一个元素 y 相加,并返回新的累加器。
  • 最后,我们输出了结果。
自定义归约方法

如果我们希望使用自定义的归约方法,则必须指定一个归约初始值,来作为第一个累加器的值,并定义一个方法,用于执行实际的归约操作。下面的示例,演示如何计算列表中元素的乘积。

List<int> numbers = new List<int> { 2, 3, 4, 5 };
int product = numbers.Aggregate(1,
                (accumulator, element) => accumulator * element);
Console.WriteLine(product); // 输出:120

代码解读:

  • 我们还是通过 Aggregate 方法执行归约操作,并指定初始化值为 1。
  • 归约方法使用 lambda 表达式定义,乘法操作执行累加器和下一个元素之间的操作。
  • 最后输出结果。
注意事项
  • 如果源序列不包含任何元素,则使用 seed 值作为结果。如果 seed 未提供,则抛出 InvalidOperationException 异常。
  • 如果源序列仅包含一个元素,则不执行归约,并直接返回该元素。
  • 如果源序列包含多个元素,但执行归约时出现异常,则该异常会向上传播。
参考