Curso de Raku / Avanzado / Más sobre los tipos integrados / Conjuntos, bolsas y mezclas
Bolsas y mezclas
Un set recuerda solo si un valor está presente. A veces
también quieres saber cuántas veces aparece. Para eso sirve un
Bag: mantiene un conteo para cada valor.
Puedes crear un bag con la rutina bag. Los valores
repetidos no se eliminan — se cuentan:
my $b = bag(<a b a c a>);
say $b<a>; # 3
say $b<b>; # 1Al consultar el bag por un valor con el subíndice
< >, obtienes cuántas veces se introdujo ese valor.
El método total da la suma de todos los conteos:
say bag(<a b a c a>).total; # 5Un Mix es la misma idea que un bag, excepto que los
conteos (llamados pesos) pueden ser fraccionarios en lugar de
números enteros. Para asignar pesos explícitos, empareja cada valor con
su peso y convierte la lista con .Mix:
my $m = (flour => 2.5, sugar => 0.75).Mix;
say $m<flour>; # 2.5
say $m.total; # 3.25Consultar un peso con < > y sumarlos con
total funciona exactamente igual que para un bag — solo que
los números no tienen que ser enteros. Aquí total suma los
pesos 2.5 y 0.75, dando 3.25 — es
la suma de los pesos, no un conteo de los valores. Los bags y mixes son
útiles siempre que necesites rastrear cantidades — por ejemplo, contar
cuántas veces aparece cada palabra en un texto, o asignar pesos a
opciones.
Navegación del curso
← Quiz — Conjuntos | Contar los distintos →
💪 O ve directamente a los ejercicios de esta
sección.