Enumerable.Aggregate 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
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>
用來將最終累加值轉換成結果值的函式。
傳回
轉換後的最終累加值。
例外狀況
source
、func
或 resultSelector
為 null
。
範例
下列程式碼範例示範如何使用 來套用 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 和四個數值匯總方法,也就是 Min 、 MaxSum 和 Average 。
適用於
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) 的累加函式。
傳回
最終累積值。
例外狀況
source
或 func
為 null
。
範例
下列程式碼範例示範如何使用 來套用 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 和四個數值匯總方法,也就是 Min 、 MaxSum 和 Average 。
適用於
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) 的累加函式。
傳回
最終累積值。
例外狀況
source
或 func
為 null
。
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 和四個數值匯總方法,也就是 Min 、 MaxSum 和 Average 。
適用於
意見反應
https://aka.ms/ContentUserFeedback。
即將推出:在 2024 年,我們將隨著內容的意見反應機制逐步淘汰 GitHub 問題,並以新的意見反應系統來取代。 如需詳細資訊,請參閱提交並檢視相關的意見反應