Курс языка программирования Raku / Приложение 🆕 / Работа с данными / Списки, массивы и хеши / Exercises / Объедините два склада

Решение: Объедините два склада

Вот один из возможных вариантов решения задачи.

Код

my %shop-a = apples => 3, pears => 2;
my %shop-b = apples => 4, plums => 5;

my %total;
for %shop-a, %shop-b -> %shop {
    %total{$_} += %shop{$_} for %shop.keys;
}

say %total.sort.map({ "{.key}: {.value}" }).join(', ');

🦋 Исходный код можно найти в файле merge-inventories.raku.

Вывод

apples: 7, pears: 2, plums: 5

Комментарии

  1. Проход по обоим хешам с %total{$_} += ... прибавляет каждое количество к текущей сумме независимо от того, встречался ли ключ раньше: отсутствующий ключ начинается с нуля.

  2. %total.sort упорядочивает пары по ключу, а .map форматирует каждую как ключ: значение перед их склейкой.

Навигация по курсу

Объедините два склада   |   Нарастающие итоги