在 Ruby 中从多维数组创建排列

Posted

技术标签:

【中文标题】在 Ruby 中从多维数组创建排列【英文标题】:Creating permutations from a multi-dimensional array in Ruby 【发布时间】:2011-07-31 17:57:41 【问题描述】:

我在 Ruby 中有以下多维数组:

[[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 函数可以帮助解决这个问题?或者是递归的唯一选择?

谢谢

【问题讨论】:

您应该始终显示您尝试过的代码,即使它不起作用。有时修复只是一个小调整。其他时候,您将获得替代解决方案。总是,我们将能够判断您是否真的尝试过某些东西,或者只是在寻找答案。 【参考方案1】:

是的,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]] 

【讨论】:

以上是关于在 Ruby 中从多维数组创建排列的主要内容,如果未能解决你的问题,请参考以下文章

基于颜色键的多维数组排列顺序

在opencv(C++)中从caffe读取多维数组

与多维数组 ruby​​ 的数组值比较

多维数组中的数组排列保持键PHP

ruby 将多维数组转换为一个数组

Java数组声明创建和使用以及多维数组Arrays类稀疏数组