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