如何将 2 元素列表的列表制作成哈希?

How to make a list of 2-element lists into a hash?

我有一个双元素列表的列表,就像你通过 (1..5) Z (20..24) 得到的那样,我想把它变成一个散列(在这个例子中,你通过 {1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 =>24}。我可以做到 "by hand",但这不太优雅,而且我确信 Raku 有一种惯用的方式来做到这一点。我想出的不优雅的替代方案是:

my @a = (1..5) Z (20..24);
my %a;
for @a -> @x {
   %a{@x[0]} = @x[1];
my %h = (1..5) Z=> (20..24);
say %h;  # {1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 => 24}

Z 元运算符将运算符作为其名称的一部分,默认为 ,,因此默认创建列表。如果您添加 Pair 构造函数(又名胖逗号),那么您将创建一个 Pair 列表,您可以将其输入 Hash.

另一种解决方案是 flatZ 的结果:

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