我在Ruby中有以下多维数组:
[[1,2], [3], [4,5,6]]
Run Code Online (Sandbox Code Playgroud)
我需要输出以下内容:
[[1,3,4], [1,3,5], [1,3,6], [2,3,4], [2,3,5], [2,3,6]]
Run Code Online (Sandbox Code Playgroud)
我试过创建一个递归函数,但我运气不好.
是否有任何Ruby功能可以帮助解决这个问题?或者是递归执行它的唯一选择?
谢谢
Mla*_*vić 33
是的,Array#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]]
Run Code Online (Sandbox Code Playgroud)
另一个变种:
a.inject(&:product).map(&:flatten)
#=> [[1, 3, 4], [1, 3, 5], [1, 3, 6], [2, 3, 4], [2, 3, 5], [2, 3, 6]]
Run Code Online (Sandbox Code Playgroud)