Rubyリファレンス: Home

product (Array)

Edit   History

Ruby 1.8.7 Ruby 1.9

標準クラス・モジュール > Array > product

array.product(other_array, ...)

productメソッドは、配列の要素と引数の配列other_arrayの要素の組合せを作り、配列の配列を作成して返します。

たとえば、配列[a0, a1, a2, ...]と配列[b0, b1, b2, ...]を組み合わせると、次のような結果が返ります。

[[a0, b0], [a0, b1], [a0, b2], ..., [a1, b0], [a1, b1], [a1, b2], ...,
 [a2, b0], [a2, b1], [a2, b2], ...]

次の例は、3つの要素と2つの要素を組み合わせるものです。6通りの組合せができます。

dish1 = ["チキン", "ポーク", "マトン"]
dish2 = ["パン", "ライス"]
sets = dish1.product(dish2).collect {|set| set.join("+") }
puts sets.join(" ")
チキン+パン チキン+ライス ポーク+パン ポーク+ライス マトン+パン マトン+ライス

引数には複数の配列を指定できます。次の例は、3つの要素、2つの要素、2つの要素を組み合わせるものです。12通りの組合せができます。

dish1 = ["チキン", "ポーク", "マトン"]
dish2 = ["パン", "ライス"]
drink = ["コーヒー", "紅茶"]
sets = dish1.product(dish2, drink).collect {|set| set.join("+") }
puts sets
チキン+パン+コーヒー
チキン+パン+紅茶
チキン+ライス+コーヒー
(中略)
マトン+ライス+紅茶

引数を省略したときは、1要素からなる配列の配列を返します。引数に空の配列を指定したときは、空の配列を返します。

p [1, 2, 3].product
p [1, 2, 3].product([])
[[1], [2], [3]]
[]
array.product(other_array, ...) {|arr| block }

Ruby 1.9.2 Ruby 1.9.2では、productメソッドにブロックを渡すと、要素を組合せた配列をブロック引数に入れながら繰り返しブロックを実行します。ブロックを渡したときの戻り値はレシーバ自身です。

dish1 = ["チキン", "ポーク", "マトン"]
dish2 = ["パン", "ライス"]
dish1.product(dish2) {|set| print set.join("+"), " " }
puts
チキン+パン チキン+ライス ポーク+パン ポーク+ライス マトン+パン マトン+ライス

関連項目