Ruby flatten flatten (matriz de matrices)

Tengo una matriz como la siguiente

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

Es decir, una matriz de elementos que son (1) matrices de 2 elementos, o (2) una matriz de matrices de 2 elementos.

Estoy tratando de encontrar una forma elegante de "aplanar" esta matriz de manera que los elementos que son (2) se expandan en elementos de nivel raíz. En este ejemplo:

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

Esto es casi como usarArray#flatten(depth)exceptodepth necesita trabajar de adentro hacia afuera, en lugar de afuera hacia adentro.

Las matrices reales pueden ser muy grandes, por lo que no quiero presionar (<<) elementos en una nueva matriz en un bucle por razones de rendimiento. Por alguna razón, no puedo pensar en cómo usar cualquier combinación demap, flatten, flat_mapu otro más eficienteEnumerable métodos para lograr esto sin escribir un bucle de preasignación y llenado de estilo C ++. ¿Alguien puede pensar en una forma más rubí de hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta