2要素リストのリストをハッシュにする方法は?


9

私は、たとえばで取得するような2要素のリストのリストを持って(1..5) Z (20..24)います{1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 =>24}。これをハッシュにしたいのです(この例では、で取得したものです。「手動」で実行できますが、あまりにもエレガントではなく、Rakuには慣用的な方法があると私は確信しています。

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

回答:


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

Zメタ演算子は、その名前の一部としてオペレータを取り、がデフォルトになります,ので、デフォルトでリストを作成し、。Pairコンストラクター(別名fat-comma)を追加すると、Pairsのリストが作成され、これをにフィードできますHash

代替ソリューションはflat、次の結果を10にすることですZ

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

1
この特定の例では、これはうまく機能します。しかし、2要素リストのリストを他の方法で取得した場合はどうなりますか?
フォンブランド

1
次に、使用する2番目のオプションが機能するflatはずです。
Elizabeth Mattijsen

1
@vonbrand平坦化戦略は完全に一般的です。flatレベルがListsの場合、マルチレベルデータ構造の複数のレベルをフラット化します。ただし、非Lists をすでに導入している場合、たとえば、Array使用flat する前にデータをに割り当てた後、そうflatすることは適切なツールではなくなります。たとえば、それを使用して割り当てたmy @a = 1..5 Z 20..25;場合flat単独では機能しません。このように平らにしmy %h = @a[*;*];ます。ここでは、マルチレベルデータを平坦化するために添え字を使用することについてもう少し書きまし
レイフ

@ralph、どうですか((1, (1, 2, 3)), (2, (5, 6)), (17, (3, 4, 5, 92, 31))(つまり、最終結果はリストを値として持つハッシュになります)?
フォンブランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.