Поделиться через


Группировка данных

Обновлен: Ноябрь 2007

Группировкой называется операция размещения данных по группам так, что элементы в каждой группе имеют общий атрибут.

На следующем рисунке показаны результаты группировки последовательности знаков. Ключом для каждой группы является знак.

Операции группировки LINQ

Методы стандартных операторов запросов, которые группируют элементы данных, перечислены в следующем разделе.

Методы

Имя метода

Описание

Синтаксис выражения запроса C#

Синтаксис выражения запроса Visual Basic

Дополнительные сведения

GroupBy

Группирует элементы с общим атрибутом. Каждая группа представлена объектом IGrouping<TKey, TElement>.

group … by

или

group … by … into …

Group … By … Into …

Enumerable.GroupBy

Queryable.GroupBy

ToLookup

Добавляет элементы в Lookup<TKey, TElement> (словарь "один ко многим") на основании функции выбора ключа.

Неприменимо.

Неприменимо.

Enumerable.ToLookup

Пример синтаксиса выражения запроса

В следующем примере кода для группировки целых чисел из списка на основании четности/нечетности используется условие group by в C# или условие Group By в Visual Basic.

Dim numbers As New System.Collections.Generic.List(Of Integer) _
    (New Integer() {35, 44, 200, 84, 3987, 4, 199, 329, 446, 208})

Dim query = From number In numbers _
            Group By Remainder = (number Mod 2) Into Group

Dim sb As New System.Text.StringBuilder()
For Each group In query
    sb.AppendLine(If(group.Remainder = 0, vbCrLf & "Even numbers:", vbCrLf & "Odd numbers:"))
    For Each num In group.Group
        sb.AppendLine(num)
    Next
Next

' Display the results.
MsgBox(sb.ToString())

' This code produces the following output:

' Odd numbers:
' 35
' 3987
' 199
' 329

' Even numbers:
' 44
' 200
' 84
' 4
' 446
' 208

List<int> numbers = new List<int>() { 35, 44, 200, 84, 3987, 4, 199, 329, 446, 208 };

IEnumerable<IGrouping<int, int>> query = from number in numbers
                                         group number by number % 2;

foreach (var group in query)
{
    Console.WriteLine(group.Key == 0 ? "\nEven numbers:" : "\nOdd numbers:");
    foreach (int i in group)
        Console.WriteLine(i);
}

/* This code produces the following output:

    Odd numbers:
    35
    3987
    199
    329

    Even numbers:
    44
    200
    84
    4
    446
    208
*/

Дополнительные сведения о группировке данных

Topic Location
Практическое руководство. Вложенный запрос в операции группирования (Руководство по программированию на C#) Справочник программиста по C#
Предложение group (Справочник по C#) Справочник программиста по C#
Практическое руководство. Различные способы группирования результатов (руководство по программированию на C#) Справочник программиста по C#
Практическое руководство. Группирование группы (руководство по программированию в C#) Справочник программиста по C#
Практическое руководство. Группировка файлов по расширению (LINQ) LINQ (Language-Integrated Query)
Практическое руководство. Разделение файла на несколько файлов с помощью групп (LINQ) LINQ (Language-Integrated Query)
Практическое руководство. Вложенный запрос в операции группирования (Руководство по программированию на C#) dv_csref
Предложение group (Справочник по C#) dv_csref
Практическое руководство. Группировка результатов запросов (Руководство по программированию на C#) dv_csref
Практическое руководство. Создание вложенной группы (Руководство по программированию на C#) dv_csref
Практическое руководство. Группировка файлов по расширению (LINQ) dv_Linq
Практическое руководство. Разделение файла на несколько файлов с помощью групп (LINQ) dv_Linq
Практическое руководство. Вложенный запрос в операции группирования (Руководство по программированию на C#) dv_csref
Предложение group (Справочник по C#) dv_csref
Практическое руководство. Группировка результатов запросов (Руководство по программированию на C#) dv_csref
Практическое руководство. Создание вложенной группы (Руководство по программированию на C#) dv_csref
Практическое руководство. Группировка файлов по расширению (LINQ) dv_Linq
Практическое руководство. Разделение файла на несколько файлов с помощью групп (LINQ) dv_Linq

См. также

Основные понятия

Общие сведения о стандартных операторах запроса

Ссылки

Предложение group (Справочник по C#)

Предложение Group By (Visual Basic)

System.Linq