Курс Raku / Розширені / Докладніше про вбудовані типи / Множини, мультимножини та суміші
Мультимножини та суміші
Множина пам’ятає лише те, чи присутнє значення. Іноді
хочеться знати ще й скільки разів воно трапляється. Для цього й
існує Bag: він зберігає лічильник для кожного значення.
Мультимножина створюється підпрограмою bag. Повторювані
значення не злипаються — вони підраховуються:
my $b = bag(<a b a c a>);
say $b<a>; # 3
say $b<b>; # 1Запит до мультимножини за значенням через індекс
< > повертає, скільки разів це значення було
покладено. Метод total дає суму всіх лічильників:
say bag(<a b a c a>).total; # 5Mix — це та сама ідея, що й мультимножина, тільки
лічильники (їх називають вагами) можуть бути дробовими, а не
цілими. Щоб призначити явні ваги, зіставте кожне значення з його вагою
та зведіть список через .Mix:
my $m = (flour => 2.5, sugar => 0.75).Mix;
say $m<flour>; # 2.5
say $m.total; # 3.25Пошук ваги через < > і підсумовування їх через
total працюють точно як для мультимножини — просто числа не
мусять бути цілими. Тут total додає ваги 2.5
та 0.75, даючи 3.25: це сума ваг, а не
кількість значень. Мультимножини й суміші стають у пригоді щоразу, коли
потрібно відстежувати кількості, — наприклад, рахувати, як часто кожне
слово трапляється в тексті, або призначати ваги варіантам.
Навігація курсом
← Тест — Множини | Порахувати унікальні →
💪 Або перейдіть одразу до вправ цього
розділу.