Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Enumerable.GroupBy<TSource, TKey, TElement> (Método) (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.

Espacio de nombres:  System.Linq
Ensamblado:  System.Core (en System.Core.dll)

public static IEnumerable<IGrouping<TKey, TElement>> GroupBy<TSource, TKey, TElement>(
	this IEnumerable<TSource> source,
	Func<TSource, TKey> keySelector,
	Func<TSource, TElement> elementSelector
)

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
Tipo: System.Collections.Generic.IEnumerable<TSource>
IEnumerable<T> cuyos elementos se van a agrupar.
keySelector
Tipo: System.Func<TSource, TKey>
Función para extraer la clave de cada elemento.
elementSelector
Tipo: System.Func<TSource, TElement>
Función que asigna cada elemento de origen a un elemento de IGrouping<TKey, TElement>.

Valor devuelto

Tipo: System.Collections.Generic.IEnumerable<IGrouping<TKey, TElement>>
IEnumerable<IGrouping<TKey, TElement>> en C# o IEnumerable(Of IGrouping(Of TKey, TElement)) en Visual Basic donde cada objeto IGrouping<TKey, TElement> contiene una colección de objetos de tipo TElement y una clave.

Nota sobre el uso

En Visual Basic y C#, se puede llamar a este método como a un método de instancia en cualquier objeto de tipo IEnumerable<TSource>. Cuando emplee la sintaxis del método de instancia para llamar a este método, omita el primer parámetro. Para obtener más información, vea Métodos de extensión (Visual Basic) o Métodos de extensión (Guía de programación de C#).

ExcepciónCondición
ArgumentNullException

source o keySelector o elementSelector es null.

Este método se implementa usando 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 se enumera el objeto mediante una llamada directa a su método GetEnumerator o a través de foreach en Visual C# o For Each en Visual Basic.

El método GroupBy<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>) devuelve una colección de objetos IGrouping<TKey, TElement>, uno por cada una de las distintas claves encontradas. IGrouping<TKey, TElement> es una interfaz IEnumerable<T> que también tiene una clave asociada a sus elementos.

Los objetos IGrouping<TKey, TElement> se proporcionan en un orden que se establece de acuerdo con el orden que siguen los elementos en el parámetro source que produjo la primera clave de cada IGrouping<TKey, TElement>. Los elementos de una agrupación se proporcionan en el mismo orden que mantienen en source los elementos que los generan.

El comparador de igualdad predeterminado Default se utiliza para comparar claves.

En el ejemplo de código siguiente se muestra cómo utilizar 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
            */



En la sintaxis de las expresiones de consulta, una cláusula group by (Visual C#) o Group By Into (Visual Basic) se convierte en una invocación de GroupBy. La conversió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;


NotaNota

En una expresión de consulta de Visual C# o Visual Basic, las expresiones de selección de elementos y claves se producen en orden inverso a la posición que tienen sus argumentos en una llamada al método GroupBy<TSource, TKey, TElement>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource, TElement>).

.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft