2011-04-07 149 views
12
创建从一个多维阵列排列

我有红宝石以下多维数组:在红宝石

[[1,2], [3], [4,5,6]] 

我需要有下面的输出:

[[1,3,4], [1,3,5], [1,3,6], [2,3,4], [2,3,5], [2,3,6]] 

我试图创建递归函数,但我没有太多的运气。

是否有任何Ruby功能可以帮助解决这个问题?或者是递归执行它的唯一选择?

感谢

+3

你应该总是告诉你已经尝试了代码,即使没没有工作。有时候修正是一个小调整。其他时候,你会得到替代解决方案。总是,我们可以告诉你是否真的尝试过某种东西,或者只是在寻找答案。 – 2011-04-07 14:21:33

回答

29

是啊,Array#product做到了这一点(Cartesian product):

a = [[1,2], [3], [4,5,6]] 
head, *rest = a # head = [1,2], rest = [[3], [4,5,6]] 
head.product(*rest) 
#=> [[1, 3, 4], [1, 3, 5], [1, 3, 6], [2, 3, 4], [2, 3, 5], [2, 3, 6]] 

另一个变化:

a.inject(&:product).map(&:flatten) 
#=> [[1, 3, 4], [1, 3, 5], [1, 3, 6], [2, 3, 4], [2, 3, 5], [2, 3, 6]]