Ruby内部展平(数组数组)

And*_*rtz 3 ruby arrays flatten

我有一个像下面这样的数组

[
  [[0, :a], [2, :b]],
  [3, :c],
  [4, :d],
  [[5, :e], [6, :f], [7, :g]]
]
Run Code Online (Sandbox Code Playgroud)

也就是说,元素数组是(1)2元素数组,或(2)2元素数组数组.

我试图找到一种优雅的方法来"扁平化"这个数组,使得(2)元素扩展到根级元素.在这个例子中:

[[0, :a], [2, :b], [3, :c], [4, :d], [5, :e], [6, :f], [7, :g]]
Run Code Online (Sandbox Code Playgroud)

这几乎就像使用一样Array#flatten(depth),除了depth需要从内到外工作,而不是外在工作.

实际的数组可能变得非常大,因此<<出于性能原因,我不希望将()元素推送到循环中的新数组.出于某种原因,我想不出如何使用的任意组合map,flatten,flat_map,或其他更有效的Enumerable方法来完成,而不需要写一个C++ -风格的预分配,并填入循环.任何人都可以想到更多Rubyist方式来做到这一点吗?

saw*_*awa 8

一种方法是:

array.flatten.each_slice(2).to_a
Run Code Online (Sandbox Code Playgroud)