Ruby-如何从数组列表中的每个数组中选取1个值来找到结果的组合

Ruby-如何从数组列表中的每个数组中选取1个值来找到结果的组合,ruby,Ruby,假设我在ruby中有以下数组包含在一个数组中,我不知道会有多少个数组或它们的长度。下面是一个例子: [["cat", "dog"],[1, 3, 5, 7],["morning", "afternoon", "evening"]] 我想做的是,从每个数组中选取1个值并将其作为这些组合的数组返回,从而得到所有结果的组合。因此,在下面的示例中,应该有2*4*3或24个可能的唯一结果 结果是: result = [["cat", 1, "morning"], ["cat", 1, "afternoo

假设我在ruby中有以下数组包含在一个数组中,我不知道会有多少个数组或它们的长度。下面是一个例子:

[["cat", "dog"],[1, 3, 5, 7],["morning", "afternoon", "evening"]]
我想做的是,从每个数组中选取1个值并将其作为这些组合的数组返回,从而得到所有结果的组合。因此,在下面的示例中,应该有2*4*3或24个可能的唯一结果

结果是:

result = [["cat", 1, "morning"], ["cat", 1, "afternoon"], ["dog", 5, "evening"] ...]

我如何在ruby中为N个数组列表执行此操作?我试着胡乱摆弄产品、地图和注射,但我无法让它工作

编辑,因为您明确表示,您处理的不仅仅是三个数组
a1
a2
a3
,而是一个数组数组,将我的解决方案改为使用
产品

像这样

 a1.map{|x1| a2.map{|x2| a3.map{|x3| [x1, x2, x3] }}}.flatten(2)
或使用
平面地图

 a1.flat_map{|x1| a2.flat_map{|x2| a3.map{|x3| [x1, x2, x3] }}}

哇,或者只是:

 a1.product(a2,a3)
如果有多个数组(不只是第一个示例中固定的3个数组), 然后:

:


请注意,您更愿意编写
Array.product(*xs)
,但Ruby的核心中没有这样的classmethod(很容易编写,当然,但可能应该存在)。

我重新表述了这个问题,因为我实际上不知道将有多少个数组,所以可能是3个,也可能是10个。我需要一些方法来动态地做它,而不知道我所拥有的数组的数量。好吧,那么,你认为什么是期望的?<代码> [[1,2,3],[4,5] ] < /代码> [[1,4],[1,5],[2,4],[2,5],[3,4],[3,5] ]数组的顺序并不重要。您编辑的答案看起来正确。谢谢@尼科加:这不是reddit,这就是为什么我们有能力将评论标记为“非建设性/离题”。请不要在这里发布这些废话。甚至,
xs.first.product(*xs.drop(1))
 input = [["cat", "dog"],[1, 3, 5, 7],["morning", "afternoon", "evening"]]
 h,*rest = input
 result = h.product(*rest)
xs[0].product(*xs.drop(1))