Enumerable.GroupBy Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Группирует элементы последовательности.
Перегрузки
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>)
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Элементы каждой группы проецируются с помощью указанной функции.
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>
Функция для создания результирующего значения для каждой группы.
Возвращаемое значение
Коллекция элементов типа TResult
, в которой каждый элемент представляет проекцию группы и ее ключа.
Исключения
Значение параметра source
или keySelector
или elementSelector
или resultSelector
— null
.
Примеры
В следующем примере кода показано, как с помощью GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>,TResult>) сгруппировать проецируемые элементы последовательности, а затем проецировать последовательность результатов типа 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
GroupByзапроса предложение (C#) или Group By Into
(Visual Basic) преобразуется в вызов .
См. также раздел
Применяется к
GroupBy<TSource,TKey,TElement,TResult>(IEnumerable<TSource>, Func<TSource, TKey>, Func<TSource,TElement>, Func<TKey,IEnumerable<TElement>, TResult>, IEqualityComparer<TKey>)
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Значения ключей сравниваются с помощью указанного компаратора, элементы каждой группы проецируются с помощью указанной функции.
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)
Параметры типа
- 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>, используемый для сравнения ключей.
Возвращаемое значение
Коллекция элементов типа TResult
, в которой каждый элемент представляет проекцию группы и ее ключа.
Исключения
Значение параметра source
или keySelector
или elementSelector
или resultSelector
— null
.
См. также раздел
Применяется к
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>)
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и проецирует элементы каждой группы с помощью указанной функции.
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(Of IGrouping(Of TKey, TElement))
Visual Basic, где каждый IGrouping<TKey,TElement> объект содержит коллекцию объектов типа TElement
и ключ.
Исключения
Параметр source
, keySelector
или elementSelector
имеет значение 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
GroupByзапроса предложение (C#) или Group By Into
(Visual Basic) преобразуется в вызов . Преобразование выражения запроса в следующем примере эквивалентно приведенному выше запросу.
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
метода напрямую, либо с помощью foreach
в C# или For Each
в Visual Basic.
Метод GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>) возвращает коллекцию IGrouping<TKey,TElement> объектов , по одному для каждого обнаруженного ключа. — IGrouping<TKey,TElement> это объект IEnumerable<T> , который также имеет ключ, связанный с его элементами.
Объекты IGrouping<TKey,TElement> возвращаются в порядке, основанном на порядке элементов в source
, в которых был создан первый ключ каждого IGrouping<TKey,TElement>. Элементы в группировке возвращаются в том порядке, в который элементы, создающие их, отображаются в source
.
Для сравнения ключей используется компаратор Default равенства по умолчанию.
См. также раздел
Применяется к
GroupBy<TSource,TKey,TElement>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TSource,TElement>, IEqualityComparer<TKey>)
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
Группирует элементы последовательности в соответствии с функцией селектора ключа. Ключи сравниваются с помощью компаратора, элементы каждой группы проецируются с помощью указанной функции.
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))
Параметры типа
- 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(Of IGrouping(Of TKey, TElement))
в Visual Basic, где каждый IGrouping<TKey,TElement> объект содержит коллекцию объектов типа TElement
и ключ.
Исключения
Параметр source
, keySelector
или elementSelector
имеет значение null
.
Комментарии
Этот метод реализуется с помощью отложенного выполнения. Немедленно возвращаемое значение — это объект, в котором хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется до тех пор, пока объект не будет перечислен либо путем вызова его GetEnumerator
метода напрямую, либо с помощью foreach
в C# или For Each
в Visual Basic.
Примечание
Примеры GroupBy
см. в следующих статьях:
- 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>)
Метод 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> возвращаются в порядке, основанном на порядке элементов в source
, в которых был создан первый ключ каждого IGrouping<TKey,TElement>. Элементы в группировке возвращаются в том порядке, в который элементы, создающие их, отображаются в source
.
Если comparer
имеет значение null
, для сравнения ключей используется компаратор Default равенства по умолчанию.
Если два ключа считаются равными в соответствии с comparer
, первый ключ выбирается в качестве ключа для этой группировки.
В синтаксисе выражений group by
GroupByзапроса предложение (C#) или Group By Into
(Visual Basic) преобразуется в вызов . Дополнительные сведения и примеры использования см. в разделах Предложение group и Group By Clause.
См. также раздел
Применяется к
GroupBy<TSource,TKey,TResult>(IEnumerable<TSource>, Func<TSource,TKey>, Func<TKey,IEnumerable<TSource>,TResult>)
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа.
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>
Функция для создания результирующего значения для каждой группы.
Возвращаемое значение
Коллекция элементов типа TResult
, в которой каждый элемент представляет проекцию группы и ее ключа.
Исключения
Параметр source
, keySelector
или resultSelector
имеет значение 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>)
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и создает результирующее значение для каждой группы и ее ключа. Ключи сравниваются с использованием заданного компаратора.
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)
Параметры типа
- 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>, используемый для сравнения ключей.
Возвращаемое значение
Коллекция элементов типа TResult
, в которой каждый элемент представляет проекцию группы и ее ключа.
Исключения
Параметр source
, keySelector
или resultSelector
имеет значение null
.
См. также раздел
Применяется к
GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа.
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>>
C# или IEnumerable(Of IGrouping(Of TKey, TSource))
в Visual Basic, где каждый IGrouping<TKey,TElement> объект содержит последовательность объектов и ключ.
Исключения
Параметр source
или keySelector
имеет значение null
.
Комментарии
Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в котором хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не будет перечислен либо путем вызова его GetEnumerator
метода напрямую, либо с помощью foreach
в C# или For Each
в Visual Basic.
Примечание
Примеры GroupBy
см. в следующих статьях:
- 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>)
Метод GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>) возвращает коллекцию IGrouping<TKey,TElement> объектов , по одному для каждого обнаруженного ключа. — IGrouping<TKey,TElement> это объект IEnumerable<T> , который также имеет ключ, связанный с его элементами.
Объекты IGrouping<TKey,TElement> возвращаются в порядке, основанном на порядке элементов в source
, которые создали первый ключ каждого IGrouping<TKey,TElement>. Элементы в группировке возвращаются в том порядке, в который они отображаются в source
.
Для сравнения ключей используется компаратор Default на равенство по умолчанию.
В синтаксисе group by
выражения запроса предложение (C#) или Group By Into
(Visual Basic) преобразуется в вызов GroupBy. Дополнительные сведения и примеры использования см. в разделах Предложение group и Предложение Group By.
См. также раздел
Применяется к
GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>)
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
- Исходный код:
- Grouping.cs
Группирует элементы последовательности в соответствии с заданной функцией селектора ключа и сравнивает ключи с помощью указанного компаратора.
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))
Параметры типа
- TSource
Тип элементов source
.
- TKey
Тип ключа, возвращаемого функцией keySelector
.
Параметры
- source
- IEnumerable<TSource>
Объект IEnumerable<T>, элементы которого следует сгруппировать.
- keySelector
- Func<TSource,TKey>
Функция, извлекающая ключ для каждого элемента.
- comparer
- IEqualityComparer<TKey>
Компаратор IEqualityComparer<T>, используемый для сравнения ключей.
Возвращаемое значение
В IEnumerable<IGrouping<TKey, TSource>>
C# или IEnumerable(Of IGrouping(Of TKey, TSource))
в Visual Basic, где каждый IGrouping<TKey,TElement> объект содержит коллекцию объектов и ключ.
Исключения
Параметр source
или keySelector
имеет значение null
.
Комментарии
Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в котором хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не будет перечислен либо путем вызова его GetEnumerator
метода напрямую, либо с помощью foreach
в C# или For Each
в Visual Basic.
Примечание
Примеры GroupBy
см. в следующих статьях:
- 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>)
Метод GroupBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IEqualityComparer<TKey>) возвращает коллекцию IGrouping<TKey,TElement> объектов , по одному для каждого обнаруженного ключа. — IGrouping<TKey,TElement> это объект IEnumerable<T> , который также имеет ключ, связанный с его элементами.
Объекты IGrouping<TKey,TElement> возвращаются в порядке, основанном на порядке элементов в source
, которые создали первый ключ каждого IGrouping<TKey,TElement>. Элементы в группировке возвращаются в том порядке, в который они отображаются в source
.
Если comparer
имеет значение null
, для сравнения ключей используется компаратор Default на равенство по умолчанию.
Если два ключа считаются равными в соответствии с comparer
, первый ключ выбирается в качестве ключа для этой группировки.
В синтаксисе group by
выражения запроса предложение (C#) или Group By Into
(Visual Basic) преобразуется в вызов GroupBy. Дополнительные сведения и примеры использования см. в разделах Предложение group и Предложение Group By.