Ruby 4.1 リファレンスマニュアル

instance method Enumerable#zip

zip(*lists) -> [[object]][permalink][rdoc][edit]
zip(*lists) {|v1, v2, ...| ...} -> nil
[Elem2] (_Each[Elem2] enum) → Array[[ Elem, Elem2? ]]
(_Each[untyped], *_Each[untyped]) → Array[Array[untyped]]
[Elem2] (_Each[Elem2]) { ([ Elem, Elem2? ]) → void } → nil
(_Each[untyped], *_Each[untyped]) { (Array[untyped]) → void } → nil

self と引数に渡した配列の各要素からなる配列の配列を生成して返します。生成される配列の要素数は self の要素数と同じです。

ブロック付きで呼び出した場合は、 self と引数に渡した配列の各要素を順番にブロックに渡します。

[PARAM] lists:
配列を指定します。配列でない場合は to_ary メソッドにより配列に変換します。 to_ary メソッドが無い場合は each を試します。
p (1..3).zip([4,5,6], [7,8,9])
# => [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

p (1..2).zip([:a,:b,:c], [:A,:B,:C,:D])
# => [[1, :a, :A], [2, :b, :B]]

p (1..5).zip([:a,:b,:c], [:A,:B,:C,:D])
# => [[1, :a, :A], [2, :b, :B],
#     [3, :c, :C], [4, nil, :D], [5, nil, nil]]
p [1,2,3].zip([4,5,6], [7,8,9]) {|ary|
  p ary
}
# => [1, 4, 7]
#    [2, 5, 8]
#    [3, 6, 9]
#    nil