我想我理解了排列組合與組合之間的區別:如何使用惰性評估來獲得數組的長度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
的實現,但我遇到了困難。
所以惰性評估是Enumerator對象的默認值? –
一個非常呃..懶惰的程序員可以生成一個數組,並使用它的'each'方法,完全沒有使用Enumerator;但一般情況是,統計員是懶惰的。 – steenslag