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


Enumerable.AggregateBy Метод

Определение

Перегрузки

Имя Описание
AggregateBy<TSource,TKey,TAccumulate>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TKey,TAccumulate>, Func<TAccumulate,TSource,TAccumulate>, IEqualityComparer<TKey>)

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

AggregateBy<TSource,TKey,TAccumulate>(IEnumerable<TSource>, Func<TSource, TKey>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, IEqualityComparer<TKey>)

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

AggregateBy<TSource,TKey,TAccumulate>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TKey,TAccumulate>, Func<TAccumulate,TSource,TAccumulate>, IEqualityComparer<TKey>)

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

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

public static System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TAccumulate>> AggregateBy<TSource,TKey,TAccumulate>(this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TKey,TAccumulate> seedSelector, Func<TAccumulate,TSource,TAccumulate> func, System.Collections.Generic.IEqualityComparer<TKey>? keyComparer = default);
static member AggregateBy : seq<'Source> * Func<'Source, 'Key> * Func<'Key, 'Accumulate> * Func<'Accumulate, 'Source, 'Accumulate> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<System.Collections.Generic.KeyValuePair<'Key, 'Accumulate>>
<Extension()>
Public Function AggregateBy(Of TSource, TKey, TAccumulate) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), seedSelector As Func(Of TKey, TAccumulate), func As Func(Of TAccumulate, TSource, TAccumulate), Optional keyComparer As IEqualityComparer(Of TKey) = Nothing) As IEnumerable(Of KeyValuePair(Of TKey, TAccumulate))

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

TSource

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

TKey

Тип ключа, возвращаемого keySelector.

TAccumulate

Тип значения аккумулятора.

Параметры

source
IEnumerable<TSource>

Значение IEnumerable<T> для агрегирования.

keySelector
Func<TSource,TKey>

Функция для извлечения ключа для каждого элемента.

seedSelector
Func<TKey,TAccumulate>

Фабрика для начального значения аккумулятора.

func
Func<TAccumulate,TSource,TAccumulate>

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

keyComparer
IEqualityComparer<TKey>

Сравнение IEqualityComparer<T> ключей с.

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

IEnumerable<KeyValuePair<TKey,TAccumulate>>

Перечисление, содержащее агрегаты, соответствующие каждому ключу, производным от source.

Примеры

В следующем примере показано, как использовать AggregateBy с селектором начального значения для вычисления нескольких значений на ключ.

public static void AggregateBySeedSelectorExample()
{
    (string Name, string Department, decimal Salary)[] employees =
    {
        ("Ali", "HR", 45000),
        ("Samer", "Technology", 50000),
        ("Hamed", "Sales", 75000),
        ("Lina", "Technology", 65000),
        ("Omar", "HR", 40000)
    };

    var result =
        employees.AggregateBy(
            e => e.Department,
            dept => (Total: 0m, Count: 0),
            (acc, e) => (acc.Total + e.Salary, acc.Count + 1)
        );

    foreach (var item in result)
    {
        Console.WriteLine($"{item.Key}: Total={item.Value.Total}, Count={item.Value.Count}");
    }

    /*
     This code produces the following output:

     HR: Total=85000, Count=2
     Technology: Total=115000, Count=2
     Sales: Total=75000, Count=1
    */
}

Комментарии

Этот метод сравнивается с GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) методами, в которых каждое группирование объединяется в одно значение, а не в отличие от выделения коллекции для каждой группы.

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

AggregateBy<TSource,TKey,TAccumulate>(IEnumerable<TSource>, Func<TSource, TKey>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>, IEqualityComparer<TKey>)

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

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

public static System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<TKey,TAccumulate>> AggregateBy<TSource,TKey,TAccumulate>(this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, TAccumulate seed, Func<TAccumulate,TSource,TAccumulate> func, System.Collections.Generic.IEqualityComparer<TKey>? keyComparer = default);
static member AggregateBy : seq<'Source> * Func<'Source, 'Key> * 'Accumulate * Func<'Accumulate, 'Source, 'Accumulate> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<System.Collections.Generic.KeyValuePair<'Key, 'Accumulate>>
<Extension()>
Public Function AggregateBy(Of TSource, TKey, TAccumulate) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), seed As TAccumulate, func As Func(Of TAccumulate, TSource, TAccumulate), Optional keyComparer As IEqualityComparer(Of TKey) = Nothing) As IEnumerable(Of KeyValuePair(Of TKey, TAccumulate))

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

TSource

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

TKey

Тип ключа, возвращаемого keySelector.

TAccumulate

Тип значения аккумулятора.

Параметры

source
IEnumerable<TSource>

Значение IEnumerable<T> для агрегирования.

keySelector
Func<TSource,TKey>

Функция для извлечения ключа для каждого элемента.

seed
TAccumulate

Начальное значение аккумулятора.

func
Func<TAccumulate,TSource,TAccumulate>

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

keyComparer
IEqualityComparer<TKey>

Сравнение IEqualityComparer<T> ключей с.

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

IEnumerable<KeyValuePair<TKey,TAccumulate>>

Перечисление, содержащее агрегаты, соответствующие каждому ключу, производным от source.

Примеры

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

public static void AggregateBySeedExample()
{
    (string Name, string Department, decimal Salary)[] employees =
    {
        ("Ali", "HR", 45000),
        ("Samer", "Technology", 50000),
        ("Hamed", "Sales", 75000),
        ("Lina", "Technology", 65000),
        ("Omar", "HR", 40000)
    };

    var totals =
        employees.AggregateBy(
            e => e.Department,
            0m,
            (total, e) => total + e.Salary
        );

    foreach (var item in totals)
    {
        Console.WriteLine($"{item.Key}: {item.Value}");
    }

    /*
     This code produces the following output:

     HR: 85000
     Technology: 115000
     Sales: 75000
    */
}

Комментарии

Этот метод сравним с GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) методами, в которых каждое группирование объединяется в одно значение, а не для выделения коллекции для каждой группы.

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