Rubyリファレンス: Home

repeated_combination (Array)

Edit   History

Ruby 1.9.2

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

array.repeated_combination(n) {|arr| block }

repeated_combinationメソッドは、配列の要素から引数n個を選んだときの重複組合せ(順序なし、重複を許す組合せ)を数え上げます。組合せの数だけブロックを繰り返し実行し、ブロック引数arrに組合せを配列で入れます。戻り値はレシーバ自身です。

次の例は、4個の数から3個を選んだときの重複組合せです。20通りの組合せができます。

numbers = [1, 2, 3, 4]
numbers.repeated_combination(3) {|a, b, c| printf("(%d, %d, %d) ", a, b, c) }
puts ""
(1, 1, 1) (1, 1, 2) (1, 1, 3) (1, 1, 4) (1, 2, 2) (1, 2, 3) (1, 2, 4) (1, 3, 3)
(1, 3, 4) (1, 4, 4) (2, 2, 2) (2, 2, 3) (2, 2, 4) (2, 3, 3) (2, 3, 4) (2, 4, 4)
(3, 3, 3) (3, 3, 4) (3, 4, 4) (4, 4, 4)

ブロックを省略したときは、Enumeratorオブジェクトを返します。

flavors = ["バニラ", "イチゴ", "チョコ", "抹茶"]
double = flavors.repeated_combination(2)
puts double.collect {|arr| arr.join("+") }.join(" ")
バニラ+バニラ バニラ+イチゴ バニラ+チョコ バニラ+抹茶 イチゴ+イチゴ イチゴ+チョ
コ イチゴ+抹茶 チョコ+チョコ チョコ+抹茶 抹茶+抹茶

引数nが0のときは空の組合せが1つとなります。

p [1, 2, 3].repeated_combination(0).to_a
[[]]

関連項目