Corso di Raku / Avanzato / Altro sui tipi predefiniti / Set, bag e mix
Bag e mix
Un set ricorda solo se un valore è presente. A volte si
vuole sapere anche quante volte compare. A questo serve il
Bag: mantiene un conteggio per ogni valore.
Si crea un bag con la routine bag. I valori ripetuti non
vengono ridotti — vengono contati:
my $b = bag(<a b a c a>);
say $b<a>; # 3
say $b<b>; # 1Interrogando il bag per un valore con il subscript
< > si ottiene quante volte quel valore è stato
inserito. Il metodo total restituisce la somma di tutti i
conteggi:
say bag(<a b a c a>).total; # 5Un Mix è la stessa idea del bag, con la differenza che i
conteggi (chiamati pesi) possono essere frazionari anziché
numeri interi. Per assegnare pesi espliciti, si associa ogni valore al
suo peso e si converte la lista con .Mix:
my $m = (flour => 2.5, sugar => 0.75).Mix;
say $m<flour>; # 2.5
say $m.total; # 3.25La consultazione di un peso con < > e la somma con
total funzionano esattamente come per un bag — solo che i
numeri non devono essere interi. Qui total somma i pesi
2.5 e 0.75, ottenendo 3.25 — è la
somma dei pesi, non un conteggio dei valori. I bag e i mix sono utili
ogni volta che si ha bisogno di tracciare quantità — ad esempio, contare
quante volte ogni parola compare in un testo, o assegnare pesi alle
opzioni.
Navigazione del corso
← Quiz — Set | Contare i distinti →
💪 Oppure vai direttamente agli esercizi di questa
sezione.