2 elemanlı listelerin bir karmasını nasıl listeleyebilirim?


9

Ben (1..5) Z (20..24)bir karma haline (bu örnekte, ne elde etmek istiyorum.) Örneğin, ne olsun gibi iki öğeli listelerin bir listesi var {1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 =>24}, ama "elle" yapabilirim, ama bu değil Çok zarif ve eminim Raku bunu yapmanın deyimsel bir yoluna sahip.

my @a = (1..5) Z (20..24);
my %a;
for @a -> @x {
   %a{@x[0]} = @x[1];

Yanıtlar:


12
my %h = (1..5) Z=> (20..24);
say %h;  # {1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 => 24}

ZMeta-operatör adının bir parçası olarak bir operatör alır ve Bunu varsayılan ,böylece varsayılan olarak listeleri oluşturma. PairYapıcıyı (aka fat-virgül) eklerseniz, a'ya Pairbesleyebileceğiniz bir s listesi oluşturursunuz Hash.

Alternatif bir çözüm şu flatsonuca ulaşmak olacaktır Z:

my %h = flat (1..5) Z (20..24);

1
Bu özel örnek için, bu iyi çalışıyor. Ama iki elemanlı listelerin listesini başka bir şekilde alırsam ne olur?
— vonbrand

1
Sonra ikinci seçenek kullanarak flatçalışmalıdır.
— Elizabeth Mattijsen

1
@vonbrand Düzleştirme stratejisi tamamen geneldir. flatdüzeyler Lists ise çok düzeyli bir veri yapısının birden çok düzeyini düzleştirir . Ancak, önceden olmayanları tanıttıysanız List, örneğin bunu Arraykullanmadan flat önce bir veriyi atamak, flatartık doğru araç olmayacaktır. Belirlediğiniz Örneğin, bu kullanarak my @a = 1..5 Z 20..25;daha sonra flatişi yapmayacağım yalnız. Böyle düzeltirim my %h = @a[*;*];. Burada çok seviyeli verileri düzleştirmek için abonelikleri kullanma hakkında biraz daha yazdım .
— Mart'ta raiph

@ralph, ne olacak ((1, (1, 2, 3)), (2, (5, 6)), (17, (3, 4, 5, 92, 31))(yani, sonuç, değerleri değer olarak içeren bir karma olur)?
— vonbrand
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.