AggregateBy в LINQ
Метод AggregateBy сочетает группировку и свёртку:
для каждого ключа свой накопитель. Начальное
значение и функция обновления задаются так же,
как у Aggregate, но отдельно для каждой
группы.
Сумма длин слов с одинаковой длиной считается
отдельно. Для длины 2 слова "bb" и
"cc" дают сумму 4:
string[] words = ["a", "bb", "cc"];
var q = words.AggregateBy(w => w.Length, 0, (acc, w) => acc + w.Length);
Console.WriteLine(q.First(k => k.Key == 2).Value);
Чётные числа 2, 4 и 4 дают
сумму 10. Нечётное 1 даёт сумму
1:
int[] nums = [2, 4, 4, 1];
var q = nums.AggregateBy(n => n % 2, 0, (acc, n) => acc + n);
Console.WriteLine(q.First(g => g.Key == 0).Value);
Console.WriteLine(q.First(g => g.Key == 1).Value);
Сложите суммы заказов отдельно по каждому
городу и выведите сумму для "Riga".
Сложите баллы студентов с одинаковой буквой
оценки и выведите сумму для "A".