Ruby:如何将数组数组连接成一个数组

Ped*_*ori 66 ruby arrays concatenation multidimensional-array

我在Ruby on Rails(3.1)中有一个数组数组,其中所有内部数组都有不同的大小.有没有办法轻松连接所有内部数组,以获得所有项目的一个大的一角形数组?

我知道你可以使用Array :: concat函数来连接两个数组,我可以做一个循环依次将它们连接起来,像这样:

concatenated = Array.new
array_of_arrays.each do |array|
    concatenated.concat(array)
end
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有类似Ruby的单行程,可以更干净的方式完成.

谢谢你的帮助.

mil*_*ose 151

您正在寻找#flatten:

concatenated = array_of_arrays.flatten
Run Code Online (Sandbox Code Playgroud)

默认情况下,这将以递归方式展平列表.#flatten接受一个可选参数来限制递归深度 - 文档列出了用于说明差异的示例.

  • 更好'扁平(1)`.数组中的元素本身可以是数组,并且它们将以递归方式展平. (22认同)

d11*_*wtq 27

或者更一般地说:

array_of_arrays.reduce(:concat)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此代码将更改原始的 `array_of_arrays`,如果您仍计划在其他地方使用原始数组,这可能会导致问题。 (2认同)

Pan*_*kaj 6

你可以使用扁平化!方法。例如。 a = [ 1, 2, [3, [4, 5] ] ] a.flatten! #=> [1, 2, 3, 4, 5]