我正在做的事情非常像背包问题,我想在其中迭代任意数量的输入的所有组合。
例如,如果我的函数需要3个数组,我想获得所有i×j×k组合。如果我的函数需要5个数组,我想获得所有i×j×k×l×m组合。
示例一:
c
示例二:
result = all_products([1,2,3,4,5], [1,2,3], [10,20,30,40,50,60,70,80])
result.length == 120
但我不知道我要接纳多少个数组。
在Ruby中执行此操作的方法是什么?
这是 NOT 询问如何找到所有1对数组。我的输入数组可能都不同。
这是我到目前为止所尝试的内容:
result = all_products([1,2,3], [1,2,3], [1,2,3], [1,2,3], [1,2,3], [1,2,3])
result.length == 729
答案 0 :(得分:1)
我会从获得'产品'开始2个阵列:
def product2(array1, array2)
array1.map { |e1| array2.map { |e2| e1*e2 } }.flatten
end
然后您可以推广到任意数量的数组:
def all_products(*arrays)
arrays.reduce([1]) { |result, array| product2(result, array) }
end
您可能希望处理极端情况(例如空数组或根本没有输入数组)