Ruby_Array_13
この記事は、以下のドキュメントを改変(自分なりに整理)して利用しています。
class Array (Ruby 3.0.0 リファレンスマニュアル)
インスタンスメソッド
combination(n) {|c| block } -> Array
combination(n) -> Enumerator
- サイズnの組み合わせをすべて生成し、それを引数としてブロックを実行する
- 組み合わせの順序は保証されない
- ブロックなしで呼び出されると、組み合わせを生成するEnumeratorオブジェクトを返す
- nに整数以外のオブジェクトを指定した場合、to_intメソッドによる暗黙の型変換を試みる
irb(main):001:0> arr = [1, 2, 3, 1] => [1, 2, 3, 1] irb(main):002:0> arr.combination(1) => #<Enumerator: [1, 2, 3, 1]:combination(1)> irb(main):003:0> arr.combination(1).to_a => [[1], [2], [3], [1]] irb(main):004:0> arr.combination(2).to_a => [[1, 2], [1, 3], [1, 1], [2, 3], [2, 1], [3, 1]] irb(main):005:0> arr.combination(3).to_a => [[1, 2, 3], [1, 2, 1], [1, 3, 1], [2, 3, 1]] irb(main):006:0> arr.combination(4).to_a => [[1, 2, 3, 1]] irb(main):007:0> arr.combination(5).to_a => [] irb(main):008:0> arr.combination(0).to_a => [[]] # memo # nに0を指定した場合、配列のサイズより大きい値を指定した場合の挙動を覚えておきたい
irb(main):001:0> arr = [1, 2, 3] => [1, 2, 3] irb(main):002:0> arr.combination(2) {|v| pp v } [1, 2] [1, 3] [2, 3] => [1, 2, 3]
irb(main):001:0> arr = [1, 2, 3] => [1, 2, 3] irb(main):002:0> arr.combination(1) => #<Enumerator: [1, 2, 3]:combination(1)> irb(main):003:0> arr << 4 => [1, 2, 3, 4] irb(main):004:0> arr.combination(1) => #<Enumerator: [1, 2, 3, 4]:combination(1)> irb(main):005:0> arr.combination(1).to_a => [[1], [2], [3], [4]]
compact -> Array
compact! -> self | nil
irb(main):001:0> arr = [1, nil, 3, nil] => [1, nil, 3, nil] irb(main):002:0> v = arr.compact => [1, 3] irb(main):003:0> arr => [1, nil, 3, nil] irb(main):004:0> v => [1, 3] irb(main):005:0> arr[0] = 'a' => "a" irb(main):006:0> arr => ["a", nil, 3, nil] irb(main):007:0> v => [1, 3]
irb(main):001:0> arr = [1, 2, 3] => [1, 2, 3] irb(main):002:0> v = arr.compact => [1, 2, 3] irb(main):003:0> arr => [1, 2, 3] irb(main):004:0> v => [1, 2, 3]
irb(main):001:0> arr = [1, nil, 3, nil] => [1, nil, 3, nil] irb(main):002:0> v = arr.compact! => [1, 3] irb(main):003:0> arr => [1, 3] irb(main):004:0> v => [1, 3]
irb(main):001:0> arr = [1, 2, 3] => [1, 2, 3] irb(main):002:0> v = arr.compact! => nil irb(main):003:0> arr => [1, 2, 3] irb(main):004:0> v => nil
メモ
- combinationの引数nに0や配列のサイズより大きい値を指定した場合の挙動は覚えておきたい
- compactとcompact!は返り値の挙動が変わるので気をつけたい