Raku kurss / Padziļināti / Konteineri / Kārtotie konteineri

Saplacināšana un vienuma veidošana

Kad ievietojat vienu masīvu citā, Raku automātiski neapvieno to elementus. Aplūkojiet šādu programmu:

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

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

Masīvam @c ir tikai divi elementi: masīvi @a un @b. Raku saglabā katru konteineru kā vienu vienību, nevis izlej tā saturu ārējā masīvā. Tas pats notiek ar vērtību, kas novietota starp citām:

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

Kad jums tiešām nepieciešama viena plakana secība, pieprasiet to tieši ar rutīnu 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

Itemizācija (Itemization)

Dažreiz jums ir nepieciešams pretējais: pasargāt konteineru no izlīdzināšanas pat flat iekšienē. Konstrukcija $(...) itemizē savu argumentu — tā atzīmē rezultātu kā vienu vienību. Salīdziniet iepriekšējo piemēru ar šo:

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

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

Šeit $(@a) saglabā @a kā vienu elementu, bet @b joprojām tiek izlīdzināts savās divās vērtībās. Tā ir sigila $ ideja vēlreiz: $ nozīmē “uztvert šo kā vienu lietu”.

Prakse

Jūs gaida 1 viktorīna par šī temata saturu.

Kursa navigācija

Saistīšana ar :=   |   Viktorīna — Masīvu ligzdošana


💪 Vai arī dodieties tieši uz šīs sadaļas vingrinājumiem.