zipメソッド 13

zipメソッドについて

docs.ruby-lang.org

AtCoderの「B - Trick Taking 」の問題でもっとスリムにできないか他のコードを見てた時に見つけた。

概要

このメソッドは自身の配列と渡される引数の配列から、それぞれのインデックス番号が同じものを一つの配列にまとめるメソッド。

注意点

  • 一つ目の配列にある要素分しかまとめない。それ以上の数が引数にあっても行われない。
  • 引数の要素数が自身の配列より少なかった場合、nilとしてまとめられる。

実例

p [1,2,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,2,3,4,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
使用される場面予想

複数の配列を扱う場合かつ、それらの要素を関連付ける必要があるとき。

他サイトのイメージでわかりやすかったのは、Excelで縦に一次元での配列を2つ作る。それらは関連性があり一つにまとめたい。 それにzipメソッドを使う。

その図がまさにジッパーのように見える。