私はパーミュテーションとコンビネーションの違いを理解していると思います:レイジー評価を使用して配列の長さNの組み合わせを取得するにはどうすればよいですか?
つまり、[1,20,30].permutation(3).map(&:sort).uniq
はと同じです。
私は現在、アレイの組み合わせの全てを取得するプログラムを持っている:
array = [1,20,30,40,50,60]
1.upto(array.length).each do |combination_length|
array.combination(combination_length).each do |combination|
# ... do something here with the combination ...
end
end
私はメモリ消費量を削減しようとしていると私は私がarray.combination(combination_length).each
に代わるものを見つけるべきだと思います。
Ruby docs for Lazy Enumeratorsはcombination
の方法を示していないようです。 Array#combination
メソッドのソースはC言語で書かれているので、私は実際にそれを変更するスキルは持っていません。
私は特にやろうとしていることarray.combination
結果の各要素に対してブロックを実行しているが、私が最初にメモリにすべての長さ-Nの組み合わせをロードする必要はありません。
私が理解できるcombination
の実装を見回しましたが、難しい時期です。
したがって、遅延評価は列挙型オブジェクトのデフォルトですか? –
怠惰なプログラマーは配列を生成し、 'each'メソッドを使うだけで、列挙子を持つ点が完全には分かりません。一般的にはい、列挙子は怠惰です。 – steenslag