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_map
u 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?