Полное руководство по языку программирования С# 14 и платформе .NET 10 / LINQ

Агрегатные операции

Начальный ⏱ 3 мин чтения 👁 2 🕓 обновлено 11.08.2026

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

Метод Aggregate

Метод Aggregate выполняет общую агрегацию элементов коллекции в зависимости от указанного выражения. Например:


int[] numbers = { 1, 2, 3, 4, 5};

int query = numbers.Aggregate((x,y)=> x - y);
Console.WriteLine(query);   // -13

Переменная query будет представлять результат агрегации массива. В качестве условия агрегации используется выражение (x,y)=> x - y, то есть вначале из первого элемента вычитается второй, потом из получившегося значения вычитается третий и так далее. То есть будет эквивалентно выражению:


int query = 1 - 2 - 3 - 4 - 5

В итоге мы получим число -13. Соответственно мы бы могли использовать любые другие операции, например, сложение:


int query = numbers.Aggregate((x,y)=> x + y); // аналогично 1 + 2 + 3 + 4 + 5

Еще одна версия метода позволяет задать начальное значение, с которого начинается цепь агрегатных операций:


string[] words = { "Gaudeamus", "igitur", "Juvenes", "dum", "sumus" };
var sentence = words.Aggregate("Text:", (first, next) => $"{first} {next}");

Console.WriteLine(sentence);  // Text: Gaudeamus igitur Juvenes dum sumus

В данном случае объединяются все элементы массива words, но первым элемент агрегатной операции будет строка "Text:".

Получение размера выборки. Метод Count

Для получения числа элементов в выборке используется метод Count():


int[] numbers = { 1, 2, 3, 4, 10, 34, 55, 66, 77, 88 };
int size = numbers.Count();  // 10
Console.WriteLine(size);

Метод Count() в одной из версий также может принимать лямбда-выражение, которое устанавливает условие выборки. Поэтому мы можем в данном случае не использовать выражение Where:


int[] numbers = { 1, 2, 3, 4, 10, 34, 55, 66, 77, 88 };
//  количество четных чисел, которые больше 10
int size = numbers.Count(i => i % 2 == 0 && i > 10);
Console.WriteLine(size);    // 3

Получение суммы

Для получения суммы значений применяется метод Sum:


int[] numbers = { 1, 2, 3, 4, 10, 34, 55, 66, 77, 88 };

int sum = numbers.Sum();
Console.WriteLine(sum);     // 340

Метод Sum() имеет ряд перегрузок. В частности, если у нас набор сложных объектов, как в примере выше, то мы можем указать свойство, значения которого будут суммироваться:


Person[] people = { new Person("Tom", 37), new Person("Sam", 28), new Person("Bob", 41) };

int ageSum = people.Sum(p => p.Age);
Console.WriteLine(ageSum);     // 106

record class Person(string Name, int Age);

В данном случае вычисляется сумма значений свойств Age объектов Person из массива people.

Максимальное, минимальное и среднее значения

Для нахождения минимального значения применяется метод Min(), для получения максимального - метод Max(), а для нахождения среднего значения - метод Average(). Их действие похоже на методы Sum и Count:


int[] numbers = { 1, 2, 3, 4, 10, 34, 55, 66, 77, 88 };

int min = numbers.Min();
int max = numbers.Max();
double average = numbers.Average();

Console.WriteLine($"Min: {min}");           // Min: 1
Console.WriteLine($"Max: {max}");           // Max: 88
Console.WriteLine($"Average: {average}");   // Average: 34

Если мы работаем со сложными объектами, то в эти методы передается делегат, который принимает свойство, применяемое в вычислениях:


Person[] people = { new Person("Tom", 37), new Person("Sam", 28), new Person("Bob", 41) };

int minAge = people.Min(p => p.Age); // минимальный возраст
int maxAge = people.Max(p => p.Age); // максимальный возраст
double averageAge = people.Average(p => p.Age); //средний возраст

Console.WriteLine($"Min Age: {minAge}");           // Min Age: 28
Console.WriteLine($"Max Age: {maxAge}");           // Max Age: 41
Console.WriteLine($"Average Age: {averageAge}");   // Average Age: 35,33

record class Person(string Name, int Age);

В данном случае для вычислений применяется свойство Age, то есть вычисляется минимальный, максимальный и средний возраст.

Проверь себя

📋 Тест по теме «Агрегатные операции» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

int[] _____ = { 1, 2, 3, 4, 5};

int query = numbers.Aggregate((x,y)=> x - y);
Console.WriteLine(query);   // -13
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

int query = _____ - 2 - 3 - 4 - 5
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

int query = numbers._____((x,y)=> x + y); // аналогично 1 + 2 + 3 + 4 + 5
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string[] words = { "Gaudeamus", "igitur", "_____", "dum", "sumus" };
var sentence = words.Aggregate("Text:", (first, next) => $"{first} {next}");

Console.WriteLine(sentence);  // Text: Gaudeamus igitur Juvenes dum sumus
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

int[] numbers = { 1, 2, 3, _____, 10, 34, 55, 66, 77, 88 };
int size = numbers.Count();  // 10
Console.WriteLine(size);
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

int[] numbers = { 1, 2, 3, _____, 5};

int query = numbers.Aggregate((x,y)=> x - y);
Console._____(query);   // -13
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

int query = 1 - 2 - _____ - _____ - 5
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

Console.WriteLine(query);   // -13
int query = numbers.Aggregate((x,y)=> x - y);
int[] numbers = { 1, 2, 3, 4, 5};
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Агрегатные операции»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Агрегатные операции», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

int[] numbers = { 1, 2, 3, 4, 5};

int query = numbers.Aggregate((x,y)=> x - y);
Console.WriteLine(query);   // -13
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Агрегатные операции»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

int query = 1 - 2 - 3 - 4 - 5
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Агрегатные операции»
+50 XP

Соберите небольшую программу, которая последовательно демонстрирует ключевые идеи урока. Программа должна быть рабочей и содержать минимум два самостоятельно написанных фрагмента, а не просто копию примера из урока.

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Агрегатные операции»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Агрегатные операции». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.