この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。
class Array (Ruby 3.1 リファレンスマニュアル)
repeated_combination(n) { |c| ... } -> Array
repeated_combination(n) -> Enumerator
- サイズnの重複組合せをすべて作成し、それを引数としてブロックを実行
- 組み合わせの順序は保障されない
- nは生成される配列のサイズ。整数で指定する。整数以外の(暗黙の型変換が行えない)オブジェクトを指定するとTypeError
- ブロックなしで呼び出されると、組み合わせを生成するEnumeratorオブジェクトを返す
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> arr.repeated_combination(1).to_a
=> [[1], [2], [3]]
irb(main):003:0> arr.repeated_combination(2).to_a
=> [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]
irb(main):004:0> arr.repeated_combination(3).to_a
=> [[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 2], [1, 2, 3], [1, 3, 3], [2, 2, 2], [2, 2, 3], [2, 3, 3], [3, 3, 3]]
irb(main):005:0> arr.repeated_combination(4).to_a
=> [[1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 1, 3], [1, 1, 2, 2], [1, 1, 2, 3], [1, 1, 3, 3], [1, 2, 2, 2], [1, 2, 2, 3], [1, 2, 3, 3], [1, 3, 3, 3], [2, 2, 2, 2], [2, 2, 2, 3], [2, 2, 3, 3], [2, 3, 3, 3], [3, 3, 3, 3]]
irb(main):00:0> arr.repeated_combination(0).to_a
=> [[]]
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> arr.repeated_combination(1.0).to_a
=> [[1], [2], [3]]
irb(main):003:0> arr.repeated_combination('1').to_a
Traceback (most recent call last):
5: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>'
4: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load'
3: from /Users/mfham/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>'
2: from (irb):3:in `<main>'
1: from (irb):3:in `repeated_combination'
TypeError (no implicit conversion of String into Integer)
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> brr = arr.repeated_combination(2)
=>
irb(main):003:0> brr.each { |v| pp v }
[1, 1]
[1, 2]
[1, 3]
[2, 2]
[2, 3]
[3, 3]
=> [1, 2, 3]
irb(main):004:0> arr[2] = 5
=> 5
irb(main):005:0> arr
=> [1, 2, 5]
irb(main):006:0> brr
=>
irb(main):007:0> brr.each { |v| pp v }
[1, 1]
[1, 2]
[1, 5]
[2, 2]
[2, 5]
[5, 5]
=> [1, 2, 5]
repeated_permutation(n) { |p| ... } -> Array
repeated_permutation(n) -> Enumerator
- サイズnの重複順列をすべて作成し、それを引数としてブロックを実行
- 順列の順序は保障されない
- nは生成される配列のサイズ。整数で指定する。整数以外の(暗黙の型変換が行えない)オブジェクトを指定するとTypeError
- ブロックなしで呼び出されると、組み合わせを生成するEnumeratorオブジェクトを返す
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> arr.repeated_permutation(1).to_a
=> [[1], [2], [3]]
irb(main):003:0> arr.repeated_permutation(2).to_a
=> [[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]
irb(main):004:0> arr.repeated_permutation(3).to_a
=> [[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1], [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2], [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], [3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
irb(main):005:0> arr.repeated_permutation(4).to_a
=> [[1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 1, 3], [1, 1, 2, 1], [1, 1, 2, 2], [1, 1, 2, 3], [1, 1, 3, 1], [1, 1, 3, 2], [1, 1, 3, 3], [1, 2, 1, 1], [1, 2, 1, 2], [1, 2, 1, 3], [1, 2, 2, 1], [1, 2, 2, 2], [1, 2, 2, 3], [1, 2, 3, 1], [1, 2, 3, 2], [1, 2, 3, 3], [1, 3, 1, 1], [1, 3, 1, 2], [1, 3, 1, 3], [1, 3, 2, 1], [1, 3, 2, 2], [1, 3, 2, 3], [1, 3, 3, 1], [1, 3, 3, 2], [1, 3, 3, 3], [2, 1, 1, 1], [2, 1, 1, 2], [2, 1, 1, 3], [2, 1, 2, 1], [2, 1, 2, 2], [2, 1, 2, 3], [2, 1, 3, 1], [2, 1, 3, 2], [2, 1, 3, 3], [2, 2, 1, 1], [2, 2, 1, 2], [2, 2, 1, 3], [2, 2, 2, 1], [2, 2, 2, 2], [2, 2, 2, 3], [2, 2, 3, 1], [2, 2, 3, 2], [2, 2, 3, 3], [2, 3, 1, 1], [2, 3, 1, 2], [2, 3, 1, 3], [2, 3, 2, 1], [2, 3, 2, 2], [2, 3, 2, 3], [2, 3, 3, 1], [2, 3, 3, 2], [2, 3, 3, 3], [3, 1, 1, 1], [3, 1, 1, 2], [3, 1, 1, 3], [3, 1, 2, 1], [3, 1, 2, 2], [3, 1, 2, 3], [3, 1, 3, 1], [3, 1, 3, 2], [3, 1, 3, 3], [3, 2, 1, 1], [3, 2, 1, 2], [3, 2, 1, 3], [3, 2, 2, 1], [3, 2, 2, 2], [3, 2, 2, 3], [3, 2, 3, 1], [3, 2, 3, 2], [3, 2, 3, 3], [3, 3, 1, 1], [3, 3, 1, 2], [3, 3, 1, 3], [3, 3, 2, 1], [3, 3, 2, 2], [3, 3, 2, 3], [3, 3, 3, 1], [3, 3, 3, 2], [3, 3, 3, 3]]
irb(main):006:0> arr.repeated_permutation(0).to_a
=> [[]]
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> arr.repeated_permutation(1.0).to_a
=> [[1], [2], [3]]
irb(main):003:0> arr.repeated_permutation('1').to_a
Traceback (most recent call last):
7: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `<main>'
6: from /Users/mfham/.rbenv/versions/3.0.0/bin/irb:23:in `load'
5: from /Users/mfham/.rbenv/versions/3.0.0/lib/ruby/gems/3.0.0/gems/irb-1.3.0/exe/irb:11:in `<top (required)>'
4: from (irb):3:in `<main>'
3: from (irb):3:in `to_a'
2: from (irb):3:in `each'
1: from (irb):3:in `repeated_permutation'
TypeError (no implicit conversion of String into Integer)
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> brr = arr.repeated_permutation(1)
=>
irb(main):003:0> brr.each { |v| pp v }
[1]
[2]
[3]
=> [1, 2, 3]
irb(main):004:0> arr[2] = 5
=> 5
irb(main):005:0> brr
=>
irb(main):006:0> brr.each { |v| pp v }
[1]
[2]
[5]
=> [1, 2, 5]
メモ