2

重複の可能性:
ruby​​ 配列要素のグループ化

例。与えられた配列 a:

a = [1, 2, 3]

その長さは 3 なので、長さ 2 の配列をすべて出力したいと思います。これらは:

[1, 2]
[1, 3]
[2, 3]

Ruby にサブセット配列を取得する方法があるかどうかはわかりません。そのような方法がない場合、これを達成するための最も効率的な方法は何ですか。

4

1 に答える 1

5

これは、次の 2 つの要素を単純に組み合わせたものです。

 >> xs = [1, 2, 3]
 >> xs.combination(xs.size - 1).to_a
 => [[1, 2], [1, 3], [2, 3]]

[編集] @Joshua がコメントで指摘したように、ドキュメントには順序が保証されていないと記載されています (!)。したがって、これは、要求した順序で組み合わせを生成する機能的な実装です。combination完全を期すために、元の方法のように遅延させます。

require 'enumerable/lazy'

class Array
  def combinations_of(n)
    if n == 0
      [[]].lazy
    else
      0.upto(self.size - 1).lazy.flat_map do |idx|
        self.drop(idx + 1).combinations_of(n - 1).map do |xs| 
          [self[idx]] + xs
        end
      end    
    end
  end
end
于 2012-09-06T12:32:00.883 に答える