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

instance method Array#product

product(*lists) -> Array[permalink][rdoc][edit]
product(*lists) { |e| ... } -> self

レシーバの配列と引数で与えられた配列(複数可)のそれぞれから要素を1 個ずつとって配列とし、それらのすべての配列を要素とする配列を返します。

返される配列の長さは、レシーバと引数で与えられた配列の長さのすべての積になります。

[PARAM] lists:
配列。複数指定可能。
p [1,2,3].product([4,5])   # => [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]
p [1,2].product([1,2])     # => [[1,1],[1,2],[2,1],[2,2]]
p [1,2].product([3,4],[5,6]) # => [[1,3,5],[1,3,6],[1,4,5],[1,4,6],
                           #     [2,3,5],[2,3,6],[2,4,5],[2,4,6]]
p [1,2].product()          # => [[1],[2]]
p [1,2].product([])        # => []

ブロックが与えられた場合、作成した配列の各要素を引数としてブロックを実行して self を返します。

a = []
p [1,2,3].product([4,5]) {|e| a << e} # => [1,2,3]
p a # => [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]