Curso de Raku / Avanzado / Contenedores / Contenedores ordenados

Aplanamiento e itemización

Cuando colocas un array dentro de otro, Raku no fusiona automáticamente sus elementos. Examina el siguiente programa:

my @a = 1, 2, 3;
my @b = 4, 5;
my @c = @a, @b;

say @c.elems; # 2
say @c;       # [[1 2 3] [4 5]]

El array @c tiene solo dos elementos: los arrays @a y @b. Raku mantiene cada contenedor como un único elemento en lugar de derramar su contenido en el array externo. Lo mismo sucede con un valor colocado entre otros:

my @a = 1, 2, 3;
my @d = 0, @a, 99;
say @d; # [0 [1 2 3] 99]

Cuando realmente quieres una secuencia plana única, solicítalo explícitamente con la rutina flat:

my @a = 1, 2, 3;
my @b = 4, 5;

say flat(@a, @b);       # (1 2 3 4 5)
say flat(@a, @b).elems; # 5

Itemización

A veces quieres lo contrario: proteger un contenedor de ser aplanado, incluso dentro de flat. La construcción $(...) itemiza su argumento, lo marca como un único elemento. Compara el ejemplo anterior con este:

my @a = 1, 2, 3;
my @b = 4, 5;

say flat($(@a), @b); # ([1 2 3] 4 5)

Aquí, $(@a) mantiene @a como un solo elemento, mientras que @b sigue siendo aplanado en sus dos valores. Esta es la idea del sigilo $ una vez más: un $ significa “trata esto como una sola cosa”.

Práctica

Resuelve 1 cuestionario sobre el contenido de este tema.

Enlace con :=   |   Quiz — Anidar arrays


💪 O ve directamente a los ejercicios de esta sección.