我想我了解置换和组合之间的区别:
简而言之,[1,20,30].permutation(3).map(&:sort).uniq
与[1,20,30].combination(3)
相同。
我目前有一个程序,可以获取所有数组的组合:
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
的替代方案。
懒惰者的红宝石文档似乎没有显示combination
方法。Array#combination
方法的来源是在C中编写的,因此我实际上没有更改它的技能。
我特别要做的是为 我已经四处寻找我能理解的array.combination
结果的每个元素运行一个块,但是i 不想先将所有长度-n组合加载到内存中。<<<<<<<<<<<<<<<</p>
combination
的实现,但是我遇到了困难。
"我要做的是为array.com的每个元素运行一个块,但我不想将所有长度-n组合加载到首先记忆。"
这正是您的代码正在做的。您正在调用combination
方法没有块,这导致了枚举。然后,您使用其each
方法。一次只有一个组合。