优化Ruby中的嵌套循环

Ser*_*hin 4 ruby optimization nested-loops

在Ruby中我有三个嵌套循环:

array.each do |a|
  array.each do |b|
    array.each do |c|
      puts a * b * c
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

如果嵌套循环的数量可以增加到5-10次并且更多迭代,我该如何优化此代码?

例:

array.each do |a|
  array.each do |b|
    array.each do |c|
       array.each do |d|
         array.each do |e|
           array.each do |f|
             puts a * b * c * d * e * f
           end
         end
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

spi*_*ann 8

你可以这样做:

array.repeated_combination(array.size).each do |combination| 
  puts combination.reduce(:*)
end
Run Code Online (Sandbox Code Playgroud)

Array#repeated_combination 返回一个枚举器,它产生所有可能的组合.

因为此方法在打印之前生成所有组合,所以输出可能需要一段时间,具体取决于数组的大小.请记住,可能的组合数量增加相当快:O(n?)n是数组中元素的个数.