Enumerable.GroupBy 메서드

정의

시퀀스의 요소를 그룹화합니다.

오버로드

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 각 그룹과 해당 키에서 결과 값을 만듭니다. 각 그룹의 요소는 지정된 함수를 사용하여 프로젝션됩니다.

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 각 그룹과 해당 키에서 결과 값을 만듭니다. 키 값은 지정된 비교자를 사용하여 비교되며 각 그룹의 요소는 지정된 함수를 사용하여 프로젝션됩니다.

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 지정된 함수를 사용하여 각 그룹에 대한 요소를 투영합니다.

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

키 선택기 함수에 따라 시퀀스의 요소를 그룹화합니다. 키는 비교자를 사용하여 비교되며 각 그룹의 요소는 지정된 함수를 사용하여 프로젝션됩니다.

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 각 그룹과 해당 키에서 결과 값을 만듭니다.

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 각 그룹과 해당 키에서 결과 값을 만듭니다. 지정된 비교자를 사용하여 키를 비교합니다.

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화합니다.

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 지정된 비교자를 사용하여 키를 비교합니다.

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 각 그룹과 해당 키에서 결과 값을 만듭니다. 각 그룹의 요소는 지정된 함수를 사용하여 프로젝션됩니다.

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)

형식 매개 변수

TSource

의 요소 형식입니다 source.

TKey

keySelector반환된 키의 형식입니다.

TElement

IGrouping<TKey,TElement>요소의 형식입니다.

TResult

에서 반환 resultSelector하는 결과 값의 형식입니다.

매개 변수

source
IEnumerable<TSource>

IEnumerable<T> 그룹화할 요소입니다.

keySelector
Func<TSource,TKey>

각 요소에 대한 키를 추출하는 함수입니다.

elementSelector
Func<TSource,TElement>

각 소스 요소를 .의 요소에 매핑하는 함수입니다 IGrouping<TKey,TElement>.

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

각 그룹에서 결과 값을 만드는 함수입니다.

반품

IEnumerable<TResult>

각 요소가 그룹 및 해당 키에 대한 프로젝션을 나타내는 형식 TResult 요소의 컬렉션입니다.

예외

source 또는 keySelector 또는 elementSelectorresultSelector 입니다 null.

예제

다음 코드 예제에서는 시퀀스의 프로젝션된 요소를 그룹화한 다음 형식TResult의 결과 시퀀스를 프로젝션하는 방법을 GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,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

설명

쿼리 식 구문에서 group by(C#) 또는 Group By Into(Visual Basic) 절은 GroupBy 호출로 변환됩니다.

추가 정보

적용 대상

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 각 그룹과 해당 키에서 결과 값을 만듭니다. 키 값은 지정된 비교자를 사용하여 비교되며 각 그룹의 요소는 지정된 함수를 사용하여 프로젝션됩니다.

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

형식 매개 변수

TSource

의 요소 형식입니다 source.

TKey

keySelector반환된 키의 형식입니다.

TElement

IGrouping<TKey,TElement>요소의 형식입니다.

TResult

에서 반환 resultSelector하는 결과 값의 형식입니다.

매개 변수

source
IEnumerable<TSource>

IEnumerable<T> 그룹화할 요소입니다.

keySelector
Func<TSource,TKey>

각 요소에 대한 키를 추출하는 함수입니다.

elementSelector
Func<TSource,TElement>

각 소스 요소를 .의 요소에 매핑하는 함수입니다 IGrouping<TKey,TElement>.

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

각 그룹에서 결과 값을 만드는 함수입니다.

comparer
IEqualityComparer<TKey>

IEqualityComparer<T> 키를 비교할 수 있는 항목입니다.

반품

IEnumerable<TResult>

각 요소가 그룹 및 해당 키에 대한 프로젝션을 나타내는 형식 TResult 요소의 컬렉션입니다.

예외

source 또는 keySelector 또는 elementSelectorresultSelector 입니다 null.

추가 정보

적용 대상

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 지정된 함수를 사용하여 각 그룹에 대한 요소를 투영합니다.

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

형식 매개 변수

TSource

의 요소 형식입니다 source.

TKey

keySelector반환된 키의 형식입니다.

TElement

에 있는 요소의 형식입니다 IGrouping<TKey,TElement>.

매개 변수

source
IEnumerable<TSource>

IEnumerable<T> 그룹화할 요소입니다.

keySelector
Func<TSource,TKey>

각 요소에 대한 키를 추출하는 함수입니다.

elementSelector
Func<TSource,TElement>

각 소스 요소를 .의 요소에 IGrouping<TKey,TElement>매핑하는 함수입니다.

반품

IEnumerable<IGrouping<TKey,TElement>>

C#의 IEnumerable<IGrouping<TKey, TElement>> 또는 Visual Basic IEnumerable(Of IGrouping(Of TKey, TElement)). 여기서 각 IGrouping<TKey,TElement> 개체에는 TElement 형식의 개체 컬렉션과 키가 포함됩니다.

예외

source 또는 keySelectorelementSelector 입니다 null.

예제

다음 코드 예제에서는 시퀀스의 요소를 그룹화 하는 데 사용 GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) 하는 방법을 보여 줍니다.

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

쿼리 식 구문에서 group by(C#) 또는 Group By Into(Visual Basic) 절은 GroupBy 호출로 변환됩니다. 다음 예제에서 쿼리 식의 변환은 위 예제의 쿼리와 동일합니다.

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

메모

C# 또는 Visual Basic 쿼리 식에서 요소 및 키 선택 식은 GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) 메서드 호출의 인수 위치에서 역순으로 발생합니다.

설명

이 메서드는 지연된 실행을 사용하여 구현됩니다. 즉시 반환 값은 작업을 수행하는 데 필요한 모든 정보를 저장하는 개체입니다. 이 메서드가 나타내는 쿼리는 해당 GetEnumerator 메서드를 직접 호출하거나 C#의 foreach 또는 Visual Basic For Each 사용하여 개체가 열거될 때까지 실행되지 않습니다.

이 메서드는 GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) 발견된 각 고유 키에 대해 하나씩 개체 컬렉션을 IGrouping<TKey,TElement> 반환합니다. 또한 IGrouping<TKey,TElement>IEnumerable<T> 해당 요소와 연결된 키가 있는 것입니다.

개체는 IGrouping<TKey,TElement> 각각IGrouping<TKey,TElement>의 첫 번째 키를 생성한 요소 source 의 순서에 따라 순서대로 생성됩니다. 그룹화의 요소는 생성한 요소가 표시되는 순서대로 생성됩니다 source.

기본 같음 비교자는 Default 키를 비교하는 데 사용됩니다.

추가 정보

적용 대상

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

키 선택기 함수에 따라 시퀀스의 요소를 그룹화합니다. 키는 비교자를 사용하여 비교되며 각 그룹의 요소는 지정된 함수를 사용하여 프로젝션됩니다.

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

형식 매개 변수

TSource

의 요소 형식입니다 source.

TKey

keySelector반환된 키의 형식입니다.

TElement

에 있는 요소의 형식입니다 IGrouping<TKey,TElement>.

매개 변수

source
IEnumerable<TSource>

IEnumerable<T> 그룹화할 요소입니다.

keySelector
Func<TSource,TKey>

각 요소에 대한 키를 추출하는 함수입니다.

elementSelector
Func<TSource,TElement>

각 소스 요소를 .의 요소에 매핑하는 함수입니다 IGrouping<TKey,TElement>.

comparer
IEqualityComparer<TKey>

IEqualityComparer<T> 키를 비교할 수 있는 항목입니다.

반품

IEnumerable<IGrouping<TKey,TElement>>

C#의 IEnumerable<IGrouping<TKey, TElement>> 또는 Visual Basic IEnumerable(Of IGrouping(Of TKey, TElement)). 여기서 각 IGrouping<TKey,TElement> 개체에는 TElement 형식의 개체 컬렉션과 키가 포함됩니다.

예외

source 또는 keySelectorelementSelector 입니다 null.

설명

이 메서드는 지연된 실행을 사용하여 구현됩니다. 즉시 반환 값은 작업을 수행하는 데 필요한 모든 정보를 저장하는 개체입니다. 이 메서드가 나타내는 쿼리는 해당 GetEnumerator 메서드를 직접 호출하거나 C#의 foreach 또는 Visual Basic For Each 사용하여 개체가 열거될 때까지 실행되지 않습니다.

이 메서드는 GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>) 발견된 각 고유 키에 대해 하나씩 개체 컬렉션을 IGrouping<TKey,TElement> 반환합니다. 또한 IGrouping<TKey,TElement>IEnumerable<T> 해당 요소와 연결된 키가 있는 것입니다.

개체는 IGrouping<TKey,TElement> 각각IGrouping<TKey,TElement>의 첫 번째 키를 생성한 요소 source 의 순서에 따라 순서대로 생성됩니다. 그룹화의 요소는 생성한 요소가 표시되는 순서대로 생성됩니다 source.

null경우 comparer 기본 같음 비교자를 Default 사용하여 키를 비교합니다.

두 키가 같은 comparer것으로 간주되는 경우 첫 번째 키가 해당 그룹화의 키로 선택됩니다.

쿼리 식 구문에서 group by(C#) 또는 Group By Into(Visual Basic) 절은 GroupBy 호출로 변환됩니다. 자세한 내용 및 사용 예제는 group 절Group By 절을 참조하세요.

추가 정보

적용 대상

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 각 그룹과 해당 키에서 결과 값을 만듭니다.

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)

형식 매개 변수

TSource

의 요소 형식입니다 source.

TKey

keySelector반환된 키의 형식입니다.

TResult

에서 반환 resultSelector하는 결과 값의 형식입니다.

매개 변수

source
IEnumerable<TSource>

IEnumerable<T> 그룹화할 요소입니다.

keySelector
Func<TSource,TKey>

각 요소에 대한 키를 추출하는 함수입니다.

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

각 그룹에서 결과 값을 만드는 함수입니다.

반품

IEnumerable<TResult>

각 요소가 그룹 및 해당 키에 대한 프로젝션을 나타내는 형식 TResult 요소의 컬렉션입니다.

예외

source 또는 keySelectorresultSelector 입니다 null.

예제

다음 코드 예제에서는 시퀀스의 요소를 그룹화하고 형식GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)의 결과 시퀀스를 프로젝션하는 방법을 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

설명

쿼리 식 구문에서 group by(C#) 또는 Group By Into(Visual Basic) 절은 GroupBy 호출로 변환됩니다.

추가 정보

적용 대상

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 각 그룹과 해당 키에서 결과 값을 만듭니다. 지정된 비교자를 사용하여 키를 비교합니다.

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

형식 매개 변수

TSource

의 요소 형식입니다 source.

TKey

keySelector반환된 키의 형식입니다.

TResult

에서 반환 resultSelector하는 결과 값의 형식입니다.

매개 변수

source
IEnumerable<TSource>

IEnumerable<T> 그룹화할 요소입니다.

keySelector
Func<TSource,TKey>

각 요소에 대한 키를 추출하는 함수입니다.

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

각 그룹에서 결과 값을 만드는 함수입니다.

comparer
IEqualityComparer<TKey>

IEqualityComparer<T> 키를 비교할 수 있는 항목입니다.

반품

IEnumerable<TResult>

각 요소가 그룹 및 해당 키에 대한 프로젝션을 나타내는 형식 TResult 요소의 컬렉션입니다.

예외

source 또는 keySelectorresultSelector 입니다 null.

추가 정보

적용 대상

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화합니다.

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

형식 매개 변수

TSource

의 요소 형식입니다 source.

TKey

keySelector반환된 키의 형식입니다.

매개 변수

source
IEnumerable<TSource>

IEnumerable<T> 그룹화할 요소입니다.

keySelector
Func<TSource,TKey>

각 요소에 대한 키를 추출하는 함수입니다.

반품

IEnumerable<IGrouping<TKey,TSource>>

IEnumerable<IGrouping<TKey, TSource>> C# 또는 IEnumerable(Of IGrouping(Of TKey, TSource)) Visual Basic에서 각 IGrouping<TKey,TElement> 개체에 개체와 키 시퀀스가 포함됩니다.

예외

source 또는 keySelector .입니다 null.

설명

이 메서드는 지연된 실행을 사용하여 구현됩니다. 즉시 반환 값은 작업을 수행하는 데 필요한 모든 정보를 저장하는 개체입니다. 이 메서드가 나타내는 쿼리는 해당 GetEnumerator 메서드를 직접 호출하거나 C#의 foreach 또는 Visual Basic For Each 사용하여 개체가 열거될 때까지 실행되지 않습니다.

이 메서드는 GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) 발견된 각 고유 키에 대해 하나씩 개체 컬렉션을 IGrouping<TKey,TElement> 반환합니다. 또한 IGrouping<TKey,TElement>IEnumerable<T> 해당 요소와 연결된 키가 있는 것입니다.

개체는 IGrouping<TKey,TElement> 각각IGrouping<TKey,TElement>의 첫 번째 키를 생성한 요소 source 의 순서에 따라 순서대로 생성됩니다. 그룹화의 요소는 표시되는 순서대로 생성됩니다 source.

기본 같음 비교자는 Default 키를 비교하는 데 사용됩니다.

쿼리 식 구문에서 group by(C#) 또는 Group By Into(Visual Basic) 절은 GroupBy 호출로 변환됩니다. 자세한 내용 및 사용 예제는 group 절Group By 절을 참조하세요.

추가 정보

적용 대상

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

지정된 키 선택기 함수에 따라 시퀀스의 요소를 그룹화하고 지정된 비교자를 사용하여 키를 비교합니다.

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

형식 매개 변수

TSource

의 요소 형식입니다 source.

TKey

keySelector반환된 키의 형식입니다.

매개 변수

source
IEnumerable<TSource>

IEnumerable<T> 그룹화할 요소입니다.

keySelector
Func<TSource,TKey>

각 요소에 대한 키를 추출하는 함수입니다.

comparer
IEqualityComparer<TKey>

IEqualityComparer<T> 키를 비교할 수 있는 항목입니다.

반품

IEnumerable<IGrouping<TKey,TSource>>

C#의 IEnumerable<IGrouping<TKey, TSource>> 또는 각 IGrouping<TKey,TElement> 개체에 개체 컬렉션과 키가 포함된 Visual Basic IEnumerable(Of IGrouping(Of TKey, TSource)).

예외

source 또는 keySelector .입니다 null.

설명

이 메서드는 지연된 실행을 사용하여 구현됩니다. 즉시 반환 값은 작업을 수행하는 데 필요한 모든 정보를 저장하는 개체입니다. 이 메서드가 나타내는 쿼리는 해당 GetEnumerator 메서드를 직접 호출하거나 C#의 foreach 또는 Visual Basic For Each 사용하여 개체가 열거될 때까지 실행되지 않습니다.

이 메서드는 GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) 발견된 각 고유 키에 대해 하나씩 개체 컬렉션을 IGrouping<TKey,TElement> 반환합니다. 또한 IGrouping<TKey,TElement>IEnumerable<T> 해당 요소와 연결된 키가 있는 것입니다.

개체는 IGrouping<TKey,TElement> 각각IGrouping<TKey,TElement>의 첫 번째 키를 생성한 요소 source 의 순서에 따라 순서대로 생성됩니다. 그룹화의 요소는 표시되는 순서대로 생성됩니다 source.

null경우 comparer 기본 같음 비교자를 Default 사용하여 키를 비교합니다.

두 키가 같은 comparer것으로 간주되는 경우 첫 번째 키가 해당 그룹화의 키로 선택됩니다.

쿼리 식 구문에서 group by(C#) 또는 Group By Into(Visual Basic) 절은 GroupBy 호출로 변환됩니다. 자세한 내용 및 사용 예제는 group 절Group By 절을 참조하세요.

추가 정보

적용 대상