Enumerable.Aggregate 方法

定义

重载

Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)

对序列应用累加器函数。 将指定的种子值用作累加器的初始值,并使用指定的函数选择结果值。

Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)

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

Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>)

对序列应用累加器函数。

Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)

Source:
Aggregate.cs
Source:
Aggregate.cs
Source:
Aggregate.cs

对序列应用累加器函数。 将指定的种子值用作累加器的初始值,并使用指定的函数选择结果值。

public:
generic <typename TSource, typename TAccumulate, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static TResult Aggregate(System::Collections::Generic::IEnumerable<TSource> ^ source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> ^ func, Func<TAccumulate, TResult> ^ resultSelector);
public static TResult Aggregate<TSource,TAccumulate,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate,TSource,TAccumulate> func, Func<TAccumulate,TResult> resultSelector);
static member Aggregate : seq<'Source> * 'Accumulate * Func<'Accumulate, 'Source, 'Accumulate> * Func<'Accumulate, 'Result> -> 'Result
<Extension()>
Public Function Aggregate(Of TSource, TAccumulate, TResult) (source As IEnumerable(Of TSource), seed As TAccumulate, func As Func(Of TAccumulate, TSource, TAccumulate), resultSelector As Func(Of TAccumulate, TResult)) As TResult

类型参数

TSource

source 的元素类型。

TAccumulate

累加器值的类型。

TResult

结果值的类型。

参数

source
IEnumerable<TSource>

要聚合的 IEnumerable<T>

seed
TAccumulate

累加器的初始值。

func
Func<TAccumulate,TSource,TAccumulate>

要对每个元素调用的累加器函数。

resultSelector
Func<TAccumulate,TResult>

将累加器的最终值转换为结果值的函数。

返回

TResult

已转换的累加器最终值。

例外

sourcefuncresultSelectornull

示例

下面的代码示例演示如何使用 Aggregate 应用累加器函数和结果选择器。

string[] fruits = { "apple", "mango", "orange", "passionfruit", "grape" };

// Determine whether any string in the array is longer than "banana".
string longestName =
    fruits.Aggregate("banana",
                    (longest, next) =>
                        next.Length > longest.Length ? next : longest,
    // Return the final result as an upper case string.
                    fruit => fruit.ToUpper());

Console.WriteLine(
    "The fruit with the longest name is {0}.",
    longestName);

// This code produces the following output:
//
// The fruit with the longest name is PASSIONFRUIT.
Sub AggregateEx3()
    Dim fruits() As String =
    {"apple", "mango", "orange", "passionfruit", "grape"}

    ' Determine whether any string in the array is longer than "banana".
    Dim longestName As String =
    fruits.Aggregate("banana",
                     Function(ByVal longest, ByVal fruit) _
                         IIf(fruit.Length > longest.Length, fruit, longest),
                     Function(ByVal fruit) fruit.ToUpper())

    ' Display the output.
    Console.WriteLine($"The fruit with the longest name is {longestName}")
End Sub

' This code produces the following output:
'
' The fruit with the longest name is PASSIONFRUIT

注解

方法 Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>) 使对值序列执行计算变得简单。 此方法的工作原理是,对 中的每个source元素调用func一次。 每次 func 调用 时, Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>) 都会将序列中的 元素和聚合值 (作为第一个参数传递给 func) 。 参数的值 seed 用作初始聚合值。 的结果 func 将替换以前的聚合值。 的最终结果 func 传递给 resultSelector 以获取 的最终结果 Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>)

为了简化常见的聚合操作,标准查询运算符还包括一个常规用途计数方法和 Count四个数值聚合方法,即 MinMaxSumAverage

适用于

Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)

Source:
Aggregate.cs
Source:
Aggregate.cs
Source:
Aggregate.cs

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

public:
generic <typename TSource, typename TAccumulate>
[System::Runtime::CompilerServices::Extension]
 static TAccumulate Aggregate(System::Collections::Generic::IEnumerable<TSource> ^ source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> ^ func);
public static TAccumulate Aggregate<TSource,TAccumulate> (this System.Collections.Generic.IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate,TSource,TAccumulate> func);
static member Aggregate : seq<'Source> * 'Accumulate * Func<'Accumulate, 'Source, 'Accumulate> -> 'Accumulate
<Extension()>
Public Function Aggregate(Of TSource, TAccumulate) (source As IEnumerable(Of TSource), seed As TAccumulate, func As Func(Of TAccumulate, TSource, TAccumulate)) As TAccumulate

类型参数

TSource

source 的元素类型。

TAccumulate

累加器值的类型。

参数

source
IEnumerable<TSource>

要聚合的 IEnumerable<T>

seed
TAccumulate

累加器的初始值。

func
Func<TAccumulate,TSource,TAccumulate>

要对每个元素调用的累加器函数。

返回

TAccumulate

累加器的最终值。

例外

sourcefuncnull

示例

下面的代码示例演示如何使用 Aggregate 应用累加器函数并使用种子值。

int[] ints = { 4, 8, 8, 3, 9, 0, 7, 8, 2 };

// Count the even numbers in the array, using a seed value of 0.
int numEven = ints.Aggregate(0, (total, next) =>
                                    next % 2 == 0 ? total + 1 : total);

Console.WriteLine("The number of even integers is: {0}", numEven);

// This code produces the following output:
//
// The number of even integers is: 6
Sub AggregateEx2()
    ' Create an array of Integers.
    Dim ints() As Integer = {4, 8, 8, 3, 9, 0, 7, 8, 2}

    ' Count the even numbers in the array, using a seed value of 0.
    Dim numEven As Integer =
    ints.Aggregate(0,
                   Function(ByVal total, ByVal number) _
                       IIf(number Mod 2 = 0, total + 1, total))

    ' Display the output.
    Console.WriteLine($"The number of even integers is {numEven}")
End Sub

' This code produces the following output:
'
'The number of even integers is 6

注解

方法 Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>) 使对值序列执行计算变得简单。 此方法的工作原理是,对 中的每个source元素调用func一次。 每次 func 调用 时, Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>) 都会将序列中的 元素和聚合值 (作为第一个参数传递给 func) 。 参数的值 seed 用作初始聚合值。 的结果 func 将替换以前的聚合值。 Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>) 返回 的最终结果 func

为了简化常见的聚合操作,标准查询运算符还包括一个常规用途计数方法和 Count四个数值聚合方法,即 MinMaxSumAverage

适用于

Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>)

Source:
Aggregate.cs
Source:
Aggregate.cs
Source:
Aggregate.cs

对序列应用累加器函数。

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource Aggregate(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TSource, TSource> ^ func);
public static TSource Aggregate<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TSource,TSource> func);
static member Aggregate : seq<'Source> * Func<'Source, 'Source, 'Source> -> 'Source
<Extension()>
Public Function Aggregate(Of TSource) (source As IEnumerable(Of TSource), func As Func(Of TSource, TSource, TSource)) As TSource

类型参数

TSource

source 的元素类型。

参数

source
IEnumerable<TSource>

要聚合的 IEnumerable<T>

func
Func<TSource,TSource,TSource>

要对每个元素调用的累加器函数。

返回

TSource

累加器的最终值。

例外

sourcefuncnull

source 中不包含任何元素。

示例

下面的代码示例演示如何使用 Aggregate反转字符串中单词的顺序。

string sentence = "the quick brown fox jumps over the lazy dog";

// Split the string into individual words.
string[] words = sentence.Split(' ');

// Prepend each word to the beginning of the
// new sentence to reverse the word order.
string reversed = words.Aggregate((workingSentence, next) =>
                                      next + " " + workingSentence);

Console.WriteLine(reversed);

// This code produces the following output:
//
// dog lazy the over jumps fox brown quick the
Sub AggregateEx1()
    Dim sentence As String =
    "the quick brown fox jumps over the lazy dog"
    ' Split the string into individual words.
    Dim words() As String = sentence.Split(" "c)
    ' Prepend each word to the beginning of the new sentence to reverse the word order.
    Dim reversed As String =
    words.Aggregate(Function(ByVal current, ByVal word) word & " " & current)

    ' Display the output.
    Console.WriteLine(reversed)
End Sub

' This code produces the following output:
'
' dog lazy the over jumps fox brown quick the

注解

方法 Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>) 使对值序列执行计算变得简单。 此方法的工作原理是,除第一个元素外,对 中的每个source元素调用func一次。 每次 func 调用 时, Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>) 都会将序列中的 元素和聚合值 (作为第一个参数传递给 func) 。 的第一个元素 source 用作初始聚合值。 的结果 func 将替换以前的聚合值。 Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>) 返回 的最终结果 func

方法的 Aggregate 此重载并非适用于所有情况,因为它使用 的第一个元素 source 作为初始聚合值。 如果返回值应仅包含满足特定条件的 source 元素,则应选择另一个重载。 例如,如果要计算 中的 source偶数之和,则此重载不可靠。 如果第一个元素是奇数而不是偶数,则结果将不正确。

为了简化常见的聚合操作,标准查询运算符还包括一个常规用途计数方法和 Count四个数值聚合方法,即 MinMaxSumAverage

适用于