Enumerable.GroupBy Metoda

Definice

Seskupí prvky sekvence.

Přetížení

GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>)

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a vytvoří výslednou hodnotu z každé skupiny a jejího klíče. Prvky každé skupiny jsou promítány pomocí zadané funkce.

GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>, TResult>, IEqualityComparer<TKey>)

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a vytvoří výslednou hodnotu z každé skupiny a jejího klíče. Hodnoty klíčů se porovnávají pomocí zadaného porovnávače a prvky každé skupiny se promítnou pomocí zadané funkce.

GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a promítne prvky pro každou skupinu pomocí zadané funkce.

GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

Seskupí prvky sekvence podle funkce selektoru klíčů. Klíče se porovnávají pomocí porovnávače a prvky každé skupiny se promítnou pomocí zadané funkce.

GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a vytvoří výslednou hodnotu z každé skupiny a jejího klíče.

GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>, IEqualityComparer<TKey>)

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a vytvoří výslednou hodnotu z každé skupiny a jejího klíče. Klíče se porovnávají pomocí zadaného porovnávače.

GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Seskupí prvky sekvence podle zadané funkce selektoru klíčů.

GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Seskupí prvky sekvence podle zadané funkce voliče klíčů a porovná klíče pomocí zadaného porovnávače.

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

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a vytvoří výslednou hodnotu z každé skupiny a jejího klíče. Prvky každé skupiny jsou promítány pomocí zadané funkce.

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)

Parametry typu

TSource

Typ elementů .source

TKey

Typ klíče vráceného nástrojem keySelector.

TElement

Typ prvků v každé IGrouping<TKey,TElement>.

TResult

Typ výsledné hodnoty vrácené nástrojem resultSelector.

Parametry

source
IEnumerable<TSource>

Jejíž IEnumerable<T> prvky se mají seskupit.

keySelector
Func<TSource,TKey>

Funkce, která extrahuje klíč pro každý prvek.

elementSelector
Func<TSource,TElement>

Funkce mapuje každý zdrojový prvek na element v objektu IGrouping<TKey,TElement>.

resultSelector
Func<TKey,IEnumerable<TElement>,TResult>

Funkce pro vytvoření výsledné hodnoty z každé skupiny.

Návraty

IEnumerable<TResult>

Kolekce prvků typu TResult , kde každý prvek představuje projekci nad skupinou a jejím klíčem.

Výjimky

source nebo keySelector nebo elementSelectorresultSelector je null.

Příklady

Následující příklad kódu ukazuje, jak použít GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) k seskupení projektovaných prvků sekvence a pak promítnout sekvenci výsledků typu 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

Poznámky

V syntaxi výrazu group by dotazu se klauzule (C#) nebo Group By Into (Visual Basic) překládá na vyvolání výrazu GroupBy.

Viz také

Platí pro

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

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a vytvoří výslednou hodnotu z každé skupiny a jejího klíče. Hodnoty klíčů se porovnávají pomocí zadaného porovnávače a prvky každé skupiny se promítnou pomocí zadané funkce.

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)

Parametry typu

TSource

Typ elementů .source

TKey

Typ klíče vráceného nástrojem keySelector.

TElement

Typ prvků v každé IGrouping<TKey,TElement>.

TResult

Typ výsledné hodnoty vrácené nástrojem resultSelector.

Parametry

source
IEnumerable<TSource>

Jejíž IEnumerable<T> prvky se mají seskupit.

keySelector
Func<TSource,TKey>

Funkce, která extrahuje klíč pro každý prvek.

elementSelector
Func<TSource,TElement>

Funkce mapuje každý zdrojový prvek na element v objektu IGrouping<TKey,TElement>.

resultSelector
Func<TKey,IEnumerable<TElement>,TResult>

Funkce pro vytvoření výsledné hodnoty z každé skupiny.

comparer
IEqualityComparer<TKey>

K IEqualityComparer<T> porovnání klíčů s.

Návraty

IEnumerable<TResult>

Kolekce prvků typu TResult , kde každý prvek představuje projekci nad skupinou a jejím klíčem.

Výjimky

source nebo keySelector nebo elementSelectorresultSelector je null.

Viz také

Platí pro

GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a promítne prvky pro každou skupinu pomocí zadané funkce.

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

Parametry typu

TSource

Typ elementů .source

TKey

Typ klíče vráceného nástrojem keySelector.

TElement

Typ prvků v .IGrouping<TKey,TElement>

Parametry

source
IEnumerable<TSource>

Jejíž IEnumerable<T> prvky se mají seskupit.

keySelector
Func<TSource,TKey>

Funkce, která extrahuje klíč pro každý prvek.

elementSelector
Func<TSource,TElement>

Funkce mapuje každý zdrojový prvek na element v objektu IGrouping<TKey,TElement>.

Návraty

IEnumerable<IGrouping<TKey,TElement>>

Objekt IEnumerable<IGrouping<TKey, TElement>> v jazyce C# nebo IEnumerable(Of IGrouping(Of TKey, TElement)) Visual Basic, kde každý IGrouping<TKey,TElement> objekt obsahuje kolekci objektů typu TElement a klíč.

Výjimky

sourceelementSelector nebo keySelector je null.

Příklady

Následující příklad kódu ukazuje, jak použít GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) k seskupení prvků sekvence.

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

V syntaxi výrazu group by dotazu se klauzule (C#) nebo Group By Into (Visual Basic) překládá na vyvolání výrazu GroupBy. Překlad výrazu dotazu v následujícím příkladu je ekvivalentní dotazu ve výše uvedeném příkladu.

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

Poznámka

Ve výrazu dotazu jazyka C# nebo Visual Basic se výrazy výběru elementu a klíče vyskytují v opačném pořadí než jejich pozice argumentů ve volání GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) metody.

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce C# nebo For Each v jazyce Visual Basic.

Metoda GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) vrátí kolekci IGrouping<TKey,TElement> objektů, jeden pro každý jedinečný klíč, který byl zjištěn. An IGrouping<TKey,TElement> je objekt IEnumerable<T> , který má také klíč přidružený k jeho prvkům.

Objekty IGrouping<TKey,TElement> jsou vygenerovány v pořadí na základě pořadí prvků v source , které vytvořily první klíč každého IGrouping<TKey,TElement>. Prvky v seskupení jsou uvedeny v pořadí, v jakém se prvky, které je vytvořily, zobrazí v source.

K porovnání klíčů se používá výchozí porovnávače Default rovnosti.

Viz také

Platí pro

GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

Seskupí prvky sekvence podle funkce selektoru klíčů. Klíče se porovnávají pomocí porovnávače a prvky každé skupiny se promítají pomocí zadané funkce.

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

Parametry typu

TSource

Typ prvků objektu source.

TKey

Typ klíče vráceného nástrojem keySelector.

TElement

Typ prvků v objektu IGrouping<TKey,TElement>.

Parametry

source
IEnumerable<TSource>

Jejíž IEnumerable<T> prvky se mají seskupit.

keySelector
Func<TSource,TKey>

Funkce, která extrahuje klíč pro každý prvek.

elementSelector
Func<TSource,TElement>

Funkce mapuje každý zdrojový prvek na element v objektu IGrouping<TKey,TElement>.

comparer
IEqualityComparer<TKey>

An IEqualityComparer<T> pro porovnání klíčů.

Návraty

IEnumerable<IGrouping<TKey,TElement>>

V IEnumerable<IGrouping<TKey, TElement>> jazyce C# nebo IEnumerable(Of IGrouping(Of TKey, TElement)) Visual Basic, kde každý IGrouping<TKey,TElement> objekt obsahuje kolekci objektů typu TElement a klíč.

Výjimky

sourceelementSelector nebo keySelector je null.

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce C# nebo For Each v jazyce Visual Basic.

Metoda GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) vrátí kolekci IGrouping<TKey,TElement> objektů, jeden pro každý jedinečný klíč, který byl zjištěn. An IGrouping<TKey,TElement> je objekt IEnumerable<T> , který má také klíč přidružený k jeho prvkům.

Objekty IGrouping<TKey,TElement> jsou vygenerovány v pořadí na základě pořadí prvků v source , které vytvořily první klíč každého IGrouping<TKey,TElement>. Prvky v seskupení jsou uvedeny v pořadí, v jakém se prvky, které je vytvořily, zobrazí v source.

Pokud comparer je null, použije se k porovnání klíčů výchozí porovnávače Default rovnosti.

Pokud jsou dva klíče považovány za stejné podle comparer, první klíč se zvolí jako klíč pro toto seskupení.

V syntaxi výrazu group by dotazu se klauzule (C#) nebo Group By Into (Visual Basic) překládá na vyvolání výrazu GroupBy. Další informace a příklady použití najdete v tématu klauzule seskupování a klauzule Seskupování podle.

Viz také

Platí pro

GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a vytvoří výslednou hodnotu z každé skupiny a jejího klíče.

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)

Parametry typu

TSource

Typ prvků objektu source.

TKey

Typ klíče vráceného nástrojem keySelector.

TResult

Typ výsledné hodnoty vrácené parametrem resultSelector.

Parametry

source
IEnumerable<TSource>

Objekt IEnumerable<T> , jehož prvky se mají seskupit.

keySelector
Func<TSource,TKey>

Funkce, která extrahuje klíč pro každý prvek.

resultSelector
Func<TKey,IEnumerable<TSource>,TResult>

Funkce, která vytvoří výslednou hodnotu z každé skupiny.

Návraty

IEnumerable<TResult>

Kolekce elementů typu TResult , kde každý prvek představuje projekci nad skupinou a jejím klíčem.

Výjimky

source nebo keySelectorresultSelector je null.

Příklady

Následující příklad kódu ukazuje, jak použít GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>) k seskupení prvků sekvence a promítnout sekvenci výsledků typu 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

Poznámky

V syntaxi výrazu group by dotazu se klauzule (C#) nebo Group By Into (Visual Basic) překládá na vyvolání GroupBy.

Viz také

Platí pro

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

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a vytvoří výslednou hodnotu z každé skupiny a jejího klíče. Klíče se porovnávají pomocí zadaného porovnávače.

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)

Parametry typu

TSource

Typ prvků objektu source.

TKey

Typ klíče vráceného nástrojem keySelector.

TResult

Typ výsledné hodnoty vrácené parametrem resultSelector.

Parametry

source
IEnumerable<TSource>

Objekt IEnumerable<T> , jehož prvky se mají seskupit.

keySelector
Func<TSource,TKey>

Funkce, která extrahuje klíč pro každý prvek.

resultSelector
Func<TKey,IEnumerable<TSource>,TResult>

Funkce, která vytvoří výslednou hodnotu z každé skupiny.

comparer
IEqualityComparer<TKey>

Pro IEqualityComparer<T> porovnání klíčů.

Návraty

IEnumerable<TResult>

Kolekce elementů typu TResult , kde každý prvek představuje projekci nad skupinou a jejím klíčem.

Výjimky

source nebo keySelectorresultSelector je null.

Viz také

Platí pro

GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

Seskupí prvky sekvence podle zadané funkce selektoru klíčů.

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

Parametry typu

TSource

Typ prvků objektu source.

TKey

Typ klíče vráceného nástrojem keySelector.

Parametry

source
IEnumerable<TSource>

Objekt IEnumerable<T> , jehož prvky se mají seskupit.

keySelector
Func<TSource,TKey>

Funkce, která extrahuje klíč pro každý prvek.

Návraty

IEnumerable<IGrouping<TKey,TSource>>

V IEnumerable<IGrouping<TKey, TSource>> jazyce C# nebo IEnumerable(Of IGrouping(Of TKey, TSource)) v jazyce Visual Basic, kde každý IGrouping<TKey,TElement> objekt obsahuje sekvenci objektů a klíč.

Výjimky

source nebo keySelector je null.

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce C# nebo For Each v jazyce Visual Basic.

Metoda GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) vrátí kolekci IGrouping<TKey,TElement> objektů, jeden pro každý zjištěný jedinečný klíč. Je IGrouping<TKey,TElement> objekt IEnumerable<T> , který má také klíč přidružený k jeho prvkům.

Objekty IGrouping<TKey,TElement> jsou vygenerovány v pořadí na základě pořadí prvků v source , které vytvořily první klíč každého IGrouping<TKey,TElement>. Prvky v seskupení jsou uvedeny v pořadí, v jakém jsou uvedeny v source.

Výchozí porovnávače Default rovnosti se používá k porovnání klíčů.

V syntaxi výrazu group by dotazu se klauzule (C#) nebo Group By Into (Visual Basic) překládá na vyvolání GroupBy. Další informace a příklady použití najdete v tématech klauzule group aGroup By Clause.

Viz také

Platí pro

GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)

Source:
Grouping.cs
Source:
Grouping.cs
Source:
Grouping.cs

Seskupí prvky sekvence podle zadané funkce selektoru klíčů a porovná klíče pomocí zadaného porovnávače.

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

Parametry typu

TSource

Typ prvků objektu source.

TKey

Typ klíče vráceného nástrojem keySelector.

Parametry

source
IEnumerable<TSource>

Objekt IEnumerable<T> , jehož prvky se mají seskupit.

keySelector
Func<TSource,TKey>

Funkce, která extrahuje klíč pro každý prvek.

comparer
IEqualityComparer<TKey>

K IEqualityComparer<T> porovnání klíčů.

Návraty

IEnumerable<IGrouping<TKey,TSource>>

V IEnumerable<IGrouping<TKey, TSource>> jazyce C# nebo IEnumerable(Of IGrouping(Of TKey, TSource)) v jazyce Visual Basic, kde každý IGrouping<TKey,TElement> objekt obsahuje kolekci objektů a klíč.

Výjimky

source nebo keySelector je null.

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce C# nebo For Each v jazyce Visual Basic.

Metoda GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) vrátí kolekci IGrouping<TKey,TElement> objektů, jeden pro každý zjištěný jedinečný klíč. Je IGrouping<TKey,TElement> objekt IEnumerable<T> , který má také klíč přidružený k jeho prvkům.

Objekty IGrouping<TKey,TElement> jsou vygenerovány v pořadí na základě pořadí prvků v source , které vytvořily první klíč každého IGrouping<TKey,TElement>. Prvky v seskupení jsou uvedeny v pořadí, v jakém jsou uvedeny v source.

Pokud comparer je null, použije se k porovnání klíčů výchozí porovnávače Default rovnosti.

Pokud jsou dva klíče považovány za stejné podle comparer, první klíč se zvolí jako klíč pro toto seskupení.

V syntaxi výrazu group by dotazu se klauzule (C#) nebo Group By Into (Visual Basic) překládá na vyvolání GroupBy. Další informace a příklady použití najdete v tématech klauzule group aGroup By Clause.

Viz také

Platí pro