Achatamento interno de rubi (matriz de matrizes)

Eu tenho uma matriz como a seguinte

[
  [[0, :a], [2, :b]],
  [3, :c],
  [4, :d],
  [[5, :e], [6, :f], [7, :g]]
]

Ou seja, uma matriz de elementos que são (1) matrizes de 2 elementos ou (2) uma matriz de matrizes de 2 elementos.

Estou tentando encontrar uma maneira elegante de "achatar" essa matriz, de modo que os elementos que são (2) sejam expandidos em elementos de nível raiz. Neste exemplo:

[[0, :a], [2, :b], [3, :c], [4, :d], [5, :e], [6, :f], [7, :g]]

É quase como usarArray#flatten(depth), excetodepth precisa trabalhar de dentro para fora, e não de fora para dentro.

As matrizes reais podem ficar muito grandes, então eu não quero pressionar (<<) elementos em uma nova matriz em um loop por motivos de desempenho. Por alguma razão, não consigo pensar em como usar qualquer combinação demap, flatten, flat_mapou outro mais eficienteEnumerable métodos para fazer isso sem gravar um loop de pré-localização e preenchimento no estilo C ++. Alguém pode pensar em uma maneira mais rubiista de fazer isso?

questionAnswers(2)

yourAnswerToTheQuestion