Курс по 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 — това
е сумата на теглата, а не брой на стойностите. Торбите и смесите са
удобни, когато трябва да следите количества — например да броите колко
пъти се появява всяка дума в текст или да задавате тегла на опции.
Навигация в курса
← Тест — Множества | Пребройте уникалните →
💪 Или преминете направо към упражненията в този
раздел.