Прочитать на английском

Поделиться через


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

Исходный код:
Aggregate.cs
Исходный код:
Aggregate.cs
Исходный код:
Aggregate.cs

Применяет к последовательности агрегатную функцию. Указанное начальное значение служит исходным значением для агрегатной операции, а указанная функция используется для выбора результирующего значения.

C#
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);

Параметры типа

TSource

Тип элементов source.

TAccumulate

Тип агрегатного значения.

TResult

Тип результирующего значения.

Параметры

source
IEnumerable<TSource>

Объект IEnumerable<T>, для которого выполняется статистическая операция.

seed
TAccumulate

Начальное агрегатное значение.

func
Func<TAccumulate,TSource,TAccumulate>

Агрегатная функция, вызываемая для каждого элемента.

resultSelector
Func<TAccumulate,TResult>

Функция, преобразующая конечное агрегатное значение в результирующее значение.

Возвращаемое значение

TResult

Преобразованное конечное агрегатное значение.

Исключения

Параметр source, func или resultSelector имеет значение null.

Примеры

В следующем примере кода показано, как использовать Aggregate для применения функции аккумуляторов и селектора результатов.

C#
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.

Комментарии

Метод Aggregate<TSource,TAccumulate,TResult>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, Func<TAccumulate,TResult>) упрощает вычисление последовательности значений. Этот метод работает путем вызова func один раз для каждого элемента в source. 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, Max, Sumи Average.

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

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

Исходный код:
Aggregate.cs
Исходный код:
Aggregate.cs
Исходный код:
Aggregate.cs

Применяет к последовательности агрегатную функцию. Указанное начальное значение используется в качестве исходного значения агрегатной операции.

C#
public static TAccumulate Aggregate<TSource,TAccumulate> (this System.Collections.Generic.IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate,TSource,TAccumulate> func);

Параметры типа

TSource

Тип элементов source.

TAccumulate

Тип агрегатного значения.

Параметры

source
IEnumerable<TSource>

Объект IEnumerable<T>, для которого выполняется статистическая операция.

seed
TAccumulate

Начальное агрегатное значение.

func
Func<TAccumulate,TSource,TAccumulate>

Агрегатная функция, вызываемая для каждого элемента.

Возвращаемое значение

TAccumulate

Конечное агрегатное значение.

Исключения

Параметр source или func имеет значение null.

Примеры

В следующем примере кода показано, как использовать Aggregate для применения функции аккумулятора и начального значения.

C#
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

Комментарии

Метод Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>) упрощает вычисление последовательности значений. Этот метод работает путем вызова func один раз для каждого элемента в source. 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, Max, Sumи Average.

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

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

Исходный код:
Aggregate.cs
Исходный код:
Aggregate.cs
Исходный код:
Aggregate.cs

Применяет к последовательности агрегатную функцию.

C#
public static TSource Aggregate<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TSource,TSource> func);

Параметры типа

TSource

Тип элементов source.

Параметры

source
IEnumerable<TSource>

Объект IEnumerable<T>, для которого выполняется статистическая операция.

func
Func<TSource,TSource,TSource>

Агрегатная функция, вызываемая для каждого элемента.

Возвращаемое значение

TSource

Конечное агрегатное значение.

Исключения

Параметр source или func имеет значение null.

Последовательность source не содержит элементов.

Примеры

В следующем примере кода показано, как изменить порядок слов в строке с помощью Aggregate.

C#
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

Комментарии

Метод Aggregate<TSource>(IEnumerable<TSource>, Func<TSource,TSource,TSource>) упрощает вычисление последовательности значений. Этот метод работает путем вызова func одного раза для каждого элемента в , source кроме первого. 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, Max, Sumи Average.

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0