如何使用懒惰评估来获取阵列的长度n组合



我想我了解置换和组合之间的区别:

简而言之,[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方法。一次只有一个组合。

最新更新