1

我有多个数组,例如 4 个:

a = ["a", "b", "c" ]
b = [1, 2, 3, 4]
c = ["xx", "yy"]
d = ["abc"]

我想以迭代的方式“逐步”做数组的乘积,像这样

a.product(b)
a.product(b, c)
a.product(b, c, d)

我希望能够以一种可扩展的方式进行,其中数组数量会发生变化并获得数组产品arr0.product(arr1, arr2, arr3.......arrn)。有人可以帮助弄清楚如何在 Ruby 中做到这一点。提前致谢!

4

2 回答 2

3
a = ["a", "b", "c" ]
b = [1, 2, 3, 4]
c = ["xx", "yy"]
d = ["abc"]

ars = [b,c,d]
p ars.each_index.flat_map{|i| a.product(*ars[0..i])}
于 2013-03-03T20:14:49.683 回答
2

你可以像这样抽象它:

def prog_product(arrs)
  x, *xs = arrs
  (1..xs.count).map(&xs.method(:take)).map do |args|
    x.product(*args)
  end
end

这将返回一个渐进式产品数组,例如:

[a1.product(a2), ..., a1.product(a2, ..., an)]

在您的情况下,prog_products(a, b, c, d)将返回[a.product(b), a.product(b, c), a.product(b, c, d)]. 如果出于某种原因您想将所有产品合并到一个大数组中,您可以调用.flatten(1)结果。

于 2013-03-03T20:39:17.997 回答