在Ruby中,我如何迭代任意数量的数组?

时间:2017-03-13 19:25:49

标签: arrays ruby iterator

我正在做的事情非常像背包问题,我想在其中迭代任意数量的输入的所有组合。

例如,如果我的函数需要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

1 个答案:

答案 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

您可能希望处理极端情况(例如空数组或根本没有输入数组)