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>)

將累加函式套用到序列上。 使用指定的值做為初始累加值,並使用指定的函式來選取結果值。

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>

所要彙總 (Aggregate) 的 IEnumerable<T>

seed
TAccumulate

初始累積值。

func
Func<TAccumulate,TSource,TAccumulate>

要在每個項目上叫用 (Invoke) 的累加函式。

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 一次。 每次呼叫 時 funcAggregate<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>)

將累加函式套用到序列上。 使用指定的初始值做為初始累加值。

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>

所要彙總 (Aggregate) 的 IEnumerable<T>

seed
TAccumulate

初始累積值。

func
Func<TAccumulate,TSource,TAccumulate>

要在每個項目上叫用 (Invoke) 的累加函式。

傳回

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 一次。 每次呼叫 時 funcAggregate<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>)

將累加函式套用到序列上。

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>

所要彙總 (Aggregate) 的 IEnumerable<T>

func
Func<TSource,TSource,TSource>

要在每個項目上叫用 (Invoke) 的累加函式。

傳回

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 一次,但第一個專案除外。 每次呼叫 時 funcAggregate<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

適用於