重複の可能性:
ruby 配列要素のグループ化
例。与えられた配列 a:
a = [1, 2, 3]
その長さは 3 なので、長さ 2 の配列をすべて出力したいと思います。これらは:
[1, 2]
[1, 3]
[2, 3]
Ruby にサブセット配列を取得する方法があるかどうかはわかりません。そのような方法がない場合、これを達成するための最も効率的な方法は何ですか。
重複の可能性:
ruby 配列要素のグループ化
例。与えられた配列 a:
a = [1, 2, 3]
その長さは 3 なので、長さ 2 の配列をすべて出力したいと思います。これらは:
[1, 2]
[1, 3]
[2, 3]
Ruby にサブセット配列を取得する方法があるかどうかはわかりません。そのような方法がない場合、これを達成するための最も効率的な方法は何ですか。
これは、次の 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