複数の配列から別の配列を生成する
2つ以上の配列を組み合わせて別の配列を生成するには、Array#zip
メソッドが利用できる。
zip
メソッドは、レシーバと引数で渡した配列から、要素を1つずつ取って、組み合わせた配列の配列を生成する。要素数はレシーバに合わせられる。このメソッドの動作はまるでジッパーのようだ。
[1, 2, 3].zip([4, 5, 6]) #=> [[1, 4], [2, 5], [3, 6]]
引数で渡す配列は複数であっても構わない。この場合も、それぞれの配列から1要素ずつ取って、組み合わせた配列の配列を生成できる。レシーバ要素数に対して足りない要素はnil
で埋められる。
[1, 2, 3].zip([4, 5, 6], [7, 8]) #=> [[1, 4, 7], [2, 5, 8], [3, 6, nil]]
zip
メソッドはブロックを取ることもできる。この場合はブロックにレシーバと引数で渡した配列の要素が順に渡される。これは複数の配列を同時に走査して何か処理を行う場合に便利だ。なお返却値はnil
である。
[1, 2, 3].zip([4, 5, 6]){|v0, v1| puts v0 + v1} #=> nil