Enumerable.GroupBy Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Agrupa los elementos de una secuencia.
Sobrecargas
GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) |
Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Los elementos de cada grupo se proyectan utilizando una función determinada. |
GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>, TResult>, IEqualityComparer<TKey>) |
Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Los valores de las claves se comparan utilizando un comparador especificado y los elementos de cada grupo se proyectan utilizando una función especificada. |
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) |
Agrupa los elementos de una secuencia según una función del selector de claves especificada y proyecta los elementos de cada grupo utilizando una función determinada. |
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) |
Agrupa los elementos de una secuencia conforme a una función del selector de claves. Las claves se comparan utilizando un comparador y los elementos de cada grupo se proyectan utilizando una función especificada. |
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) |
Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. |
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>) |
Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Las claves se comparan utilizando un comparador especificado. |
GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) |
Agrupa los elementos de una secuencia según una función del selector de claves especificada. |
GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) |
Agrupa los elementos de una secuencia según una función del selector de claves especificada y compara las claves utilizando un comparador especificado. |
GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)
- Source:
- Grouping.cs
- Source:
- Grouping.cs
- Source:
- Grouping.cs
Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Los elementos de cada grupo se proyectan utilizando una función determinada.
public:
generic <typename TSource, typename TKey, typename TElement, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TSource, TElement> ^ elementSelector, Func<TKey, System::Collections::Generic::IEnumerable<TElement> ^, TResult> ^ resultSelector);
public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector, Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult> resultSelector);
static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Source, 'Element> * Func<'Key, seq<'Element>, 'Result> -> seq<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement, TResult) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), elementSelector As Func(Of TSource, TElement), resultSelector As Func(Of TKey, IEnumerable(Of TElement), TResult)) As IEnumerable(Of TResult)
Parámetros de tipo
- TSource
Tipo de los elementos de source
.
- TKey
Tipo de la clave devuelta por keySelector
.
- TElement
Tipo de los elementos de cada IGrouping<TKey,TElement>.
- TResult
Tipo del valor de resultado devuelto por resultSelector
.
Parámetros
- source
- IEnumerable<TSource>
IEnumerable<T> cuyos elementos se van a agrupar.
- keySelector
- Func<TSource,TKey>
Función para extraer la clave de cada elemento.
- elementSelector
- Func<TSource,TElement>
Función que asigna cada elemento de origen a un elemento de IGrouping<TKey,TElement>.
- resultSelector
- Func<TKey,IEnumerable<TElement>,TResult>
Función que va a crear un valor de resultado a partir de cada grupo.
Devoluciones
Colección de elementos de tipo TResult
donde cada elemento representa una proyección sobre un grupo y su clave.
Excepciones
source
, keySelector
, elementSelector
o resultSelector
es null
.
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) para agrupar los elementos proyectados de una secuencia y, a continuación, proyectar una secuencia de resultados de tipo TResult
.
class Pet
{
public string Name { get; set; }
public double Age { get; set; }
}
public static void GroupByEx4()
{
// Create a list of pets.
List<Pet> petsList =
new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
new Pet { Name="Boots", Age=4.9 },
new Pet { Name="Whiskers", Age=1.5 },
new Pet { Name="Daisy", Age=4.3 } };
// Group Pet.Age values by the Math.Floor of the age.
// Then project an anonymous type from each group
// that consists of the key, the count of the group's
// elements, and the minimum and maximum age in the group.
var query = petsList.GroupBy(
pet => Math.Floor(pet.Age),
pet => pet.Age,
(baseAge, ages) => new
{
Key = baseAge,
Count = ages.Count(),
Min = ages.Min(),
Max = ages.Max()
});
// Iterate over each anonymous type.
foreach (var result in query)
{
Console.WriteLine("\nAge group: " + result.Key);
Console.WriteLine("Number of pets in this age group: " + result.Count);
Console.WriteLine("Minimum age: " + result.Min);
Console.WriteLine("Maximum age: " + result.Max);
}
/* This code produces the following output:
Age group: 8
Number of pets in this age group: 1
Minimum age: 8.3
Maximum age: 8.3
Age group: 4
Number of pets in this age group: 2
Minimum age: 4.3
Maximum age: 4.9
Age group: 1
Number of pets in this age group: 1
Minimum age: 1.5
Maximum age: 1.5
*/
}
Structure Pet
Public Name As String
Public Age As Double
End Structure
Public Sub GroupByEx4()
' Create a list of pets.
Dim petsList As New List(Of Pet)(New Pet() _
{New Pet With {.Name = "Barley", .Age = 8.3},
New Pet With {.Name = "Boots", .Age = 4.9},
New Pet With {.Name = "Whiskers", .Age = 1.5},
New Pet With {.Name = "Daisy", .Age = 4.3}})
' Group Pet.Age values by the Math.Floor of the age.
' Then project an anonymous type from each group
' that consists of the key, the count of the group's
' elements, and the minimum and maximum age in the group.
Dim query = petsList.GroupBy(
Function(pet) Math.Floor(pet.Age),
Function(pet) pet.Age,
Function(baseAge, ages) New With
{.Key = baseAge,
.Count = ages.Count(),
.Min = ages.Min(),
.Max = ages.Max()}
)
Dim output As New System.Text.StringBuilder
' Iterate over each anonymous type.
For Each result In query
output.AppendLine(vbCrLf & "Age group: " & result.Key)
output.AppendLine("Number of pets in this age group: " & result.Count)
output.AppendLine("Minimum age: " & result.Min)
output.AppendLine("Maximum age: " & result.Max)
Next
' Display the output.
Console.WriteLine(output.ToString)
End Sub
' This code produces the following output:
' Age group: 8
' Number of pets in this age group: 1
' Minimum age: 8.3
' Maximum age: 8.3
'
' Age group: 4
' Number of pets in this age group: 2
' Minimum age: 4.3
' Maximum age: 4.9
'
' Age group: 1
' Number of pets in this age group: 1
' Minimum age: 1.5
' Maximum age: 1.5
Comentarios
En la sintaxis de expresión de consulta, una group by
cláusula (C#) o Group By Into
(Visual Basic) se traduce en una invocación de GroupBy.
Consulte también
Se aplica a
GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>, TResult>, IEqualityComparer<TKey>)
- Source:
- Grouping.cs
- Source:
- Grouping.cs
- Source:
- Grouping.cs
Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Los valores de las claves se comparan utilizando un comparador especificado y los elementos de cada grupo se proyectan utilizando una función especificada.
public:
generic <typename TSource, typename TKey, typename TElement, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TSource, TElement> ^ elementSelector, Func<TKey, System::Collections::Generic::IEnumerable<TElement> ^, TResult> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector, Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TElement,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector, Func<TKey,System.Collections.Generic.IEnumerable<TElement>,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Source, 'Element> * Func<'Key, seq<'Element>, 'Result> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement, TResult) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), elementSelector As Func(Of TSource, TElement), resultSelector As Func(Of TKey, IEnumerable(Of TElement), TResult), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of TResult)
Parámetros de tipo
- TSource
Tipo de los elementos de source
.
- TKey
Tipo de la clave devuelta por keySelector
.
- TElement
Tipo de los elementos de cada IGrouping<TKey,TElement>.
- TResult
Tipo del valor de resultado devuelto por resultSelector
.
Parámetros
- source
- IEnumerable<TSource>
IEnumerable<T> cuyos elementos se van a agrupar.
- keySelector
- Func<TSource,TKey>
Función para extraer la clave de cada elemento.
- elementSelector
- Func<TSource,TElement>
Función que asigna cada elemento de origen a un elemento de IGrouping<TKey,TElement>.
- resultSelector
- Func<TKey,IEnumerable<TElement>,TResult>
Función que va a crear un valor de resultado a partir de cada grupo.
- comparer
- IEqualityComparer<TKey>
Interfaz IEqualityComparer<T> con la que se van a comparar las claves.
Devoluciones
Colección de elementos de tipo TResult
donde cada elemento representa una proyección sobre un grupo y su clave.
Excepciones
source
, keySelector
, elementSelector
o resultSelector
es null
.
Consulte también
Se aplica a
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)
- Source:
- Grouping.cs
- Source:
- Grouping.cs
- Source:
- Grouping.cs
Agrupa los elementos de una secuencia según una función del selector de claves especificada y proyecta los elementos de cada grupo utilizando una función determinada.
public:
generic <typename TSource, typename TKey, typename TElement>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<System::Linq::IGrouping<TKey, TElement> ^> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TSource, TElement> ^ elementSelector);
public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector);
static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Source, 'Element> -> seq<System.Linq.IGrouping<'Key, 'Element>>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), elementSelector As Func(Of TSource, TElement)) As IEnumerable(Of IGrouping(Of TKey, TElement))
Parámetros de tipo
- TSource
Tipo de los elementos de source
.
- TKey
Tipo de la clave devuelta por keySelector
.
- TElement
Tipo de los elementos de IGrouping<TKey,TElement>.
Parámetros
- source
- IEnumerable<TSource>
IEnumerable<T> cuyos elementos se van a agrupar.
- keySelector
- Func<TSource,TKey>
Función para extraer la clave de cada elemento.
- elementSelector
- Func<TSource,TElement>
Función que asigna cada elemento de origen a un elemento de IGrouping<TKey,TElement>.
Devoluciones
en IEnumerable<IGrouping<TKey, TElement>>
C# o IEnumerable(Of IGrouping(Of TKey, TElement))
en Visual Basic donde cada IGrouping<TKey,TElement> objeto contiene una colección de objetos de tipo TElement
y una clave.
Excepciones
source
o keySelector
o elementSelector
es null
.
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) para agrupar los elementos de una secuencia.
class Pet
{
public string Name { get; set; }
public int Age { get; set; }
}
// Uses method-based query syntax.
public static void GroupByEx1()
{
// Create a list of pets.
List<Pet> pets =
new List<Pet>{ new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 },
new Pet { Name="Whiskers", Age=1 },
new Pet { Name="Daisy", Age=4 } };
// Group the pets using Age as the key value
// and selecting only the pet's Name for each value.
IEnumerable<IGrouping<int, string>> query =
pets.GroupBy(pet => pet.Age, pet => pet.Name);
// Iterate over each IGrouping in the collection.
foreach (IGrouping<int, string> petGroup in query)
{
// Print the key value of the IGrouping.
Console.WriteLine(petGroup.Key);
// Iterate over each value in the
// IGrouping and print the value.
foreach (string name in petGroup)
Console.WriteLine(" {0}", name);
}
}
/*
This code produces the following output:
8
Barley
4
Boots
Daisy
1
Whiskers
*/
Structure Pet
Public Name As String
Public Age As Integer
End Structure
Sub GroupByEx1()
'Create a list of Pet objects.
Dim pets As New List(Of Pet)(New Pet() _
{New Pet With {.Name = "Barley", .Age = 8},
New Pet With {.Name = "Boots", .Age = 4},
New Pet With {.Name = "Whiskers", .Age = 1},
New Pet With {.Name = "Daisy", .Age = 4}})
' Group the pets using Age as the key
' and selecting only the pet's Name for each value.
Dim query As IEnumerable(Of IGrouping(Of Integer, String)) =
pets.GroupBy(Function(pet) pet.Age,
Function(pet) pet.Name)
Dim output As New System.Text.StringBuilder
' Iterate over each IGrouping in the collection.
For Each petGroup As IGrouping(Of Integer, String) In query
' Print the key value of the IGrouping.
output.AppendLine(petGroup.Key)
' Iterate over each value in the IGrouping and print the value.
For Each name As String In petGroup
output.AppendLine(" " & name)
Next
Next
' Display the output.
Console.WriteLine(output.ToString)
End Sub
' This code produces the following output:
'
' 8
' Barley
' 4
' Boots
' Daisy
' 1
' Whiskers
En la sintaxis de expresión de consulta, una group by
cláusula (C#) o Group By Into
(Visual Basic) se traduce en una invocación de GroupBy. La traducción de la expresión de consulta en el ejemplo siguiente es equivalente a la consulta del ejemplo anterior.
IEnumerable<IGrouping<int, string>> query =
from pet in pets
group pet.Name by pet.Age;
Dim query =
From pet In pets
Group pet.Name By Age = pet.Age Into ageGroup = Group
Nota
En una expresión de consulta de C# o Visual Basic, las expresiones de selección de elementos y claves se producen en el orden inverso de sus posiciones de argumento en una llamada al GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) método .
Comentarios
Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su GetEnumerator
método o mediante foreach
en C# o For Each
en Visual Basic.
El GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) método devuelve una colección de IGrouping<TKey,TElement> objetos , una para cada clave distinta que se encontró. es IGrouping<TKey,TElement> un IEnumerable<T> que también tiene una clave asociada a sus elementos.
Los IGrouping<TKey,TElement> objetos se producen en un orden basado en el orden de los elementos de source
que generó la primera clave de cada IGrouping<TKey,TElement>. Los elementos de una agrupación se producen en el orden en que los elementos que los generaron aparecen en source
.
El comparador Default de igualdad predeterminado se usa para comparar claves.
Consulte también
Se aplica a
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)
- Source:
- Grouping.cs
- Source:
- Grouping.cs
- Source:
- Grouping.cs
Agrupa los elementos de una secuencia conforme a una función del selector de claves. Las claves se comparan utilizando un comparador y los elementos de cada grupo se proyectan utilizando una función especificada.
public:
generic <typename TSource, typename TKey, typename TElement>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<System::Linq::IGrouping<TKey, TElement> ^> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TSource, TElement> ^ elementSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TElement>> GroupBy<TSource,TKey,TElement> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TSource,TElement> elementSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Source, 'Element> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<System.Linq.IGrouping<'Key, 'Element>>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TElement) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), elementSelector As Func(Of TSource, TElement), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of IGrouping(Of TKey, TElement))
Parámetros de tipo
- TSource
Tipo de los elementos de source
.
- TKey
Tipo de la clave devuelta por keySelector
.
- TElement
Tipo de los elementos de IGrouping<TKey,TElement>.
Parámetros
- source
- IEnumerable<TSource>
IEnumerable<T> cuyos elementos se van a agrupar.
- keySelector
- Func<TSource,TKey>
Función para extraer la clave de cada elemento.
- elementSelector
- Func<TSource,TElement>
Función que asigna cada elemento de origen a un elemento de IGrouping<TKey,TElement>.
- comparer
- IEqualityComparer<TKey>
IEqualityComparer<T> para comparar claves.
Devoluciones
En IEnumerable<IGrouping<TKey, TElement>>
C# o IEnumerable(Of IGrouping(Of TKey, TElement))
en Visual Basic, donde cada IGrouping<TKey,TElement> objeto contiene una colección de objetos de tipo TElement
y una clave.
Excepciones
source
o keySelector
o elementSelector
es null
.
Comentarios
Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su GetEnumerator
método o mediante foreach
en C# o For Each
en Visual Basic.
Nota
Para obtener ejemplos de GroupBy
, consulte los siguientes artículos:
- GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)
- GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)
- GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)
El GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) método devuelve una colección de IGrouping<TKey,TElement> objetos , una para cada clave distinta que se encontró. es IGrouping<TKey,TElement> un IEnumerable<T> que también tiene una clave asociada a sus elementos.
Los IGrouping<TKey,TElement> objetos se producen en un orden basado en el orden de los elementos de source
que generó la primera clave de cada IGrouping<TKey,TElement>. Los elementos de una agrupación se producen en el orden en que los elementos que los generaron aparecen en source
.
Si comparer
es null
, el comparador Default de igualdad predeterminado se usa para comparar claves.
Si dos claves se consideran iguales según comparer
, la primera clave se elige como clave para esa agrupación.
En la sintaxis de expresión de consulta, una group by
cláusula (C#) o Group By Into
(Visual Basic) se traduce en una invocación de GroupBy. Para obtener más información y ejemplos de uso, vea cláusula group y Group By Clause.
Consulte también
Se aplica a
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)
- Source:
- Grouping.cs
- Source:
- Grouping.cs
- Source:
- Grouping.cs
Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave.
public:
generic <typename TSource, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TKey, System::Collections::Generic::IEnumerable<TSource> ^, TResult> ^ resultSelector);
public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult> resultSelector);
static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Key, seq<'Source>, 'Result> -> seq<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TResult) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), resultSelector As Func(Of TKey, IEnumerable(Of TSource), TResult)) As IEnumerable(Of TResult)
Parámetros de tipo
- TSource
Tipo de los elementos de source
.
- TKey
Tipo de la clave devuelta por keySelector
.
- TResult
Tipo del valor de resultado devuelto por resultSelector
.
Parámetros
- source
- IEnumerable<TSource>
IEnumerable<T> cuyos elementos se van a agrupar.
- keySelector
- Func<TSource,TKey>
Función para extraer la clave de cada elemento.
- resultSelector
- Func<TKey,IEnumerable<TSource>,TResult>
Función que va a crear un valor de resultado a partir de cada grupo.
Devoluciones
Colección de elementos de tipo TResult
donde cada elemento representa una proyección sobre un grupo y su clave.
Excepciones
source
o keySelector
o resultSelector
es null
.
Ejemplos
En el ejemplo de código siguiente se muestra cómo usar GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) para agrupar los elementos de una secuencia y proyectar una secuencia de resultados de tipo TResult
.
class Pet
{
public string Name { get; set; }
public double Age { get; set; }
}
public static void GroupByEx3()
{
// Create a list of pets.
List<Pet> petsList =
new List<Pet>{ new Pet { Name="Barley", Age=8.3 },
new Pet { Name="Boots", Age=4.9 },
new Pet { Name="Whiskers", Age=1.5 },
new Pet { Name="Daisy", Age=4.3 } };
// Group Pet objects by the Math.Floor of their age.
// Then project an anonymous type from each group
// that consists of the key, the count of the group's
// elements, and the minimum and maximum age in the group.
var query = petsList.GroupBy(
pet => Math.Floor(pet.Age),
(age, pets) => new
{
Key = age,
Count = pets.Count(),
Min = pets.Min(pet => pet.Age),
Max = pets.Max(pet => pet.Age)
});
// Iterate over each anonymous type.
foreach (var result in query)
{
Console.WriteLine("\nAge group: " + result.Key);
Console.WriteLine("Number of pets in this age group: " + result.Count);
Console.WriteLine("Minimum age: " + result.Min);
Console.WriteLine("Maximum age: " + result.Max);
}
/* This code produces the following output:
Age group: 8
Number of pets in this age group: 1
Minimum age: 8.3
Maximum age: 8.3
Age group: 4
Number of pets in this age group: 2
Minimum age: 4.3
Maximum age: 4.9
Age group: 1
Number of pets in this age group: 1
Minimum age: 1.5
Maximum age: 1.5
*/
}
Structure Pet
Public Name As String
Public Age As Double
End Structure
Public Sub GroupByEx3()
' Create a list of pets.
Dim petsList As New List(Of Pet)(New Pet() _
{New Pet With {.Name = "Barley", .Age = 8.3},
New Pet With {.Name = "Boots", .Age = 4.9},
New Pet With {.Name = "Whiskers", .Age = 1.5},
New Pet With {.Name = "Daisy", .Age = 4.3}})
' Group Pet objects by the Math.Floor of their age.
' Then project an anonymous type from each group
' that consists of the key, the count of the group's
' elements, and the minimum and maximum age in the group.
Dim query = petsList.GroupBy(
Function(pet) Math.Floor(pet.Age),
Function(age, pets) New With
{.Key = age,
.Count = pets.Count(),
.Min = pets.Min(Function(pet) pet.Age),
.Max = pets.Max(Function(Pet) Pet.Age)}
)
Dim output As New System.Text.StringBuilder
' Iterate over each anonymous type.
For Each result In query
output.AppendLine(vbCrLf & "Age group: " & result.Key)
output.AppendLine("Number of pets in this age group: " & result.Count)
output.AppendLine("Minimum age: " & result.Min)
output.AppendLine("Maximum age: " & result.Max)
Next
' Display the output.
Console.WriteLine(output.ToString)
End Sub
' This code produces the following output:
' Age group: 8
' Number of pets in this age group: 1
' Minimum age: 8.3
' Maximum age: 8.3
'
' Age group: 4
' Number of pets in this age group: 2
' Minimum age: 4.3
' Maximum age: 4.9
'
' Age group: 1
' Number of pets in this age group: 1
' Minimum age: 1.5
' Maximum age: 1.5
Comentarios
En la sintaxis de expresión de consulta, una group by
cláusula (C#) o Group By Into
(Visual Basic) se traduce en una invocación de GroupBy.
Consulte también
Se aplica a
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>)
- Source:
- Grouping.cs
- Source:
- Grouping.cs
- Source:
- Grouping.cs
Agrupa los elementos de una secuencia según una función del selector de claves especificada y crea un valor de resultado a partir de cada grupo y su clave. Las claves se comparan utilizando un comparador especificado.
public:
generic <typename TSource, typename TKey, typename TResult>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<TResult> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, Func<TKey, System::Collections::Generic::IEnumerable<TSource> ^, TResult> ^ resultSelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Collections.Generic.IEnumerable<TResult> GroupBy<TSource,TKey,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, Func<TKey,System.Collections.Generic.IEnumerable<TSource>,TResult> resultSelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member GroupBy : seq<'Source> * Func<'Source, 'Key> * Func<'Key, seq<'Source>, 'Result> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<'Result>
<Extension()>
Public Function GroupBy(Of TSource, TKey, TResult) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), resultSelector As Func(Of TKey, IEnumerable(Of TSource), TResult), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of TResult)
Parámetros de tipo
- TSource
Tipo de los elementos de source
.
- TKey
Tipo de la clave devuelta por keySelector
.
- TResult
Tipo del valor de resultado devuelto por resultSelector
.
Parámetros
- source
- IEnumerable<TSource>
IEnumerable<T> cuyos elementos se van a agrupar.
- keySelector
- Func<TSource,TKey>
Función para extraer la clave de cada elemento.
- resultSelector
- Func<TKey,IEnumerable<TSource>,TResult>
Función que va a crear un valor de resultado a partir de cada grupo.
- comparer
- IEqualityComparer<TKey>
Interfaz IEqualityComparer<T> con la que se van a comparar las claves.
Devoluciones
Colección de elementos de tipo TResult
donde cada elemento representa una proyección sobre un grupo y su clave.
Excepciones
source
o keySelector
o resultSelector
es null
.
Consulte también
Se aplica a
GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)
- Source:
- Grouping.cs
- Source:
- Grouping.cs
- Source:
- Grouping.cs
Agrupa los elementos de una secuencia según una función del selector de claves especificada.
public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<System::Linq::IGrouping<TKey, TSource> ^> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector);
public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector);
static member GroupBy : seq<'Source> * Func<'Source, 'Key> -> seq<System.Linq.IGrouping<'Key, 'Source>>
<Extension()>
Public Function GroupBy(Of TSource, TKey) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey)) As IEnumerable(Of IGrouping(Of TKey, TSource))
Parámetros de tipo
- TSource
Tipo de los elementos de source
.
- TKey
Tipo de la clave devuelta por keySelector
.
Parámetros
- source
- IEnumerable<TSource>
IEnumerable<T> cuyos elementos se van a agrupar.
- keySelector
- Func<TSource,TKey>
Función para extraer la clave de cada elemento.
Devoluciones
En IEnumerable<IGrouping<TKey, TSource>>
C# o IEnumerable(Of IGrouping(Of TKey, TSource))
en Visual Basic, donde cada IGrouping<TKey,TElement> objeto contiene una secuencia de objetos y una clave.
Excepciones
source
o keySelector
es null
.
Comentarios
Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su GetEnumerator
método o mediante foreach
en C# o For Each
en Visual Basic.
Nota
Para obtener ejemplos de GroupBy
, consulte los siguientes artículos:
- GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)
- GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)
- GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)
El GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) método devuelve una colección de IGrouping<TKey,TElement> objetos, una para cada clave distinta que se encontró. es IGrouping<TKey,TElement> un objeto IEnumerable<T> que también tiene una clave asociada a sus elementos.
Los IGrouping<TKey,TElement> objetos se producen en un orden basado en el orden de los elementos de source
que generaron la primera clave de cada IGrouping<TKey,TElement>. Los elementos de una agrupación se producen en el orden en que aparecen en source
.
El comparador Default de igualdad predeterminado se usa para comparar claves.
En la sintaxis de expresión de consulta, una group by
cláusula (C#) o Group By Into
(Visual Basic) se traduce en una invocación de GroupBy. Para obtener más información y ejemplos de uso, vea cláusula group y Group By Clause.
Consulte también
Se aplica a
GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)
- Source:
- Grouping.cs
- Source:
- Grouping.cs
- Source:
- Grouping.cs
Agrupa los elementos de una secuencia según una función del selector de claves especificada y compara las claves utilizando un comparador especificado.
public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
static System::Collections::Generic::IEnumerable<System::Linq::IGrouping<TKey, TSource> ^> ^ GroupBy(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, System::Collections::Generic::IEqualityComparer<TKey> ^ comparer);
public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IEqualityComparer<TKey> comparer);
public static System.Collections.Generic.IEnumerable<System.Linq.IGrouping<TKey,TSource>> GroupBy<TSource,TKey> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IEqualityComparer<TKey>? comparer);
static member GroupBy : seq<'Source> * Func<'Source, 'Key> * System.Collections.Generic.IEqualityComparer<'Key> -> seq<System.Linq.IGrouping<'Key, 'Source>>
<Extension()>
Public Function GroupBy(Of TSource, TKey) (source As IEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), comparer As IEqualityComparer(Of TKey)) As IEnumerable(Of IGrouping(Of TKey, TSource))
Parámetros de tipo
- TSource
Tipo de los elementos de source
.
- TKey
Tipo de la clave devuelta por keySelector
.
Parámetros
- source
- IEnumerable<TSource>
IEnumerable<T> cuyos elementos se van a agrupar.
- keySelector
- Func<TSource,TKey>
Función para extraer la clave de cada elemento.
- comparer
- IEqualityComparer<TKey>
IEqualityComparer<T> para comparar claves.
Devoluciones
En IEnumerable<IGrouping<TKey, TSource>>
C# o IEnumerable(Of IGrouping(Of TKey, TSource))
en Visual Basic, donde cada IGrouping<TKey,TElement> objeto contiene una colección de objetos y una clave.
Excepciones
source
o keySelector
es null
.
Comentarios
Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su GetEnumerator
método o mediante foreach
en C# o For Each
en Visual Basic.
Nota
Para obtener ejemplos de GroupBy
, consulte los siguientes artículos:
- GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)
- GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)
- GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)
El GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) método devuelve una colección de IGrouping<TKey,TElement> objetos, una para cada clave distinta que se encontró. es IGrouping<TKey,TElement> un objeto IEnumerable<T> que también tiene una clave asociada a sus elementos.
Los IGrouping<TKey,TElement> objetos se producen en un orden basado en el orden de los elementos de source
que generaron la primera clave de cada IGrouping<TKey,TElement>. Los elementos de una agrupación se producen en el orden en que aparecen en source
.
Si comparer
es null
, el comparador Default de igualdad predeterminado se usa para comparar claves.
Si dos claves se consideran iguales según comparer
, la primera clave se elige como clave para esa agrupación.
En la sintaxis de expresión de consulta, una group by
cláusula (C#) o Group By Into
(Visual Basic) se traduce en una invocación de GroupBy. Para obtener más información y ejemplos de uso, vea cláusula group y Group By Clause.