Enumerable.AggregateBy Método

Definição

Sobrecargas

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

Origem:
AggregateBy.cs
Origem:
AggregateBy.cs
Origem:
AggregateBy.cs

Aplica uma função acumuladora sobre uma sequência, agrupando os resultados por chave.

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

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvido por keySelector.

TAccumulate

O tipo do valor acumulador.

Parâmetros

source
IEnumerable<TSource>

An IEnumerable<T> para agregar.

keySelector
Func<TSource,TKey>

Uma função para extrair a chave de cada elemento.

seedSelector
Func<TKey,TAccumulate>

Uma fábrica para o valor inicial do acumulador.

func
Func<TAccumulate,TSource,TAccumulate>

Uma função acumuladora a ser invocada em cada elemento.

keyComparer
IEqualityComparer<TKey>

E IEqualityComparer<T> para comparar chaves.

Devoluções

IEnumerable<KeyValuePair<TKey,TAccumulate>>

Um enumerável contendo os agregados correspondentes a cada chave derivada de source.

Exemplos

O exemplo seguinte demonstra como usar AggregateBy com um seletor de sementes para calcular múltiplos valores por chave.

(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
*/

Observações

Este método é comparável aos GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) métodos onde cada agrupamento é agregado num único valor, em vez de alocar uma coleção para cada grupo.

Aplica-se a

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

Origem:
AggregateBy.cs
Origem:
AggregateBy.cs
Origem:
AggregateBy.cs

Aplica uma função acumuladora sobre uma sequência, agrupando os resultados por chave.

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

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvido por keySelector.

TAccumulate

O tipo do valor acumulador.

Parâmetros

source
IEnumerable<TSource>

An IEnumerable<T> para agregar.

keySelector
Func<TSource,TKey>

Uma função para extrair a chave de cada elemento.

seed
TAccumulate

O valor inicial do acumulador.

func
Func<TAccumulate,TSource,TAccumulate>

Uma função acumuladora a ser invocada em cada elemento.

keyComparer
IEqualityComparer<TKey>

E IEqualityComparer<T> para comparar chaves.

Devoluções

IEnumerable<KeyValuePair<TKey,TAccumulate>>

Um enumerável contendo os agregados correspondentes a cada chave derivada de source.

Exemplos

O exemplo seguinte demonstra como usar AggregateBy com um valor seed constante para calcular totais por chave.

(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
*/

Observações

Este método é comparável aos GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) métodos em que cada agrupamento é agregado num único valor, em vez de alocar uma coleção para cada grupo.

Aplica-se a