Raku-Kurs / Fortgeschritten / Container / Geordnete Container

Flattening und Itemisierung

Wenn du ein Array in ein anderes steckst, verschmilzt Raku ihre Elemente nicht automatisch. Betrachte das folgende Programm:

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

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

Das Array @c hat nur zwei Elemente: die Arrays @a und @b. Raku behält jeden Container als einzelnes Element bei, statt seinen Inhalt in das äußere Array auszuschütten. Dasselbe passiert, wenn ein Wert zwischen anderen platziert wird:

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

Wenn du tatsächlich eine einzelne flache Sequenz haben willst, frage explizit danach mit der Routine 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

Itemisierung

Manchmal willst du das Gegenteil: einen Container davor schützen, abgeflacht zu werden, auch innerhalb von flat. Das Konstrukt $(...) itemisiert sein Argument — es markiert das Ergebnis als einzelnes Element. Vergleiche das vorherige Beispiel mit diesem:

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

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

Hier behält $(@a) @a als ein Element bei, während @b weiterhin in seine beiden Werte abgeflacht wird. Das ist wieder die Idee des $-Sigils: Ein $ bedeutet “behandle dies als eine einzelne Sache”.

Praxis

Lösen Sie 1 Quiz zum Inhalt dieses Themas.

Kursnavigation

Bindung mit :=   |   Quiz — Verschachtelte Arrays


💪 Oder springen Sie direkt zu den Übungen dieses Abschnitts.