Как сделать список из 2-х элементов в ха sh? - PullRequest
9 голосов
/ 28 марта 2020

У меня есть список из двух элементов, например, то, что вы получите, например, (1..5) Z (20..24), которое я хочу превратить в ха sh (в этом примере, что вы получите {1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 =>24}). Я мог бы сделать это «вручную», но это не слишком элегантно, и я уверен, что у Раку есть идиоматический c способ сделать это. Нелегальная альтернатива, которую я придумаю:

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

1 Ответ

12 голосов
/ 29 марта 2020
my %h = (1..5) Z=> (20..24);
say %h;  # {1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 => 24}

Мета-оператор Z принимает оператор как часть своего имени и по умолчанию ,, создавая списки по умолчанию. Если вы добавите конструктор Pair (он же fat-запятая), то вы создадите список Pair s, который вы можете добавить в Hash.

. Альтернативным решением будет * 1009. * десять результат Z:

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