Ruby innere Abflachung (Array von Arrays)

Ich habe ein Array wie das folgende

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

Das ist ein Array von Elementen, die entweder (1) 2-Element-Arrays oder (2) ein Array von 2-Element-Arrays sind.

Ich versuche, eine elegante Methode zu finden, um dieses Array so zu "verflachen", dass Elemente, die (2) sind, zu Elementen auf Stammebene erweitert werden. In diesem Beispiel:

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

Das ist fast wie mitArray#flatten(depth), außerdepth muss von innen nach außen arbeiten, nicht von außen nach innen.

Die tatsächlichen Arrays können sehr groß werden, so dass ich nicht pushen möchte <<) Elemente auf ein neues Array in einer Schleife aus Performancegründen. Aus irgendeinem Grund kann ich mir nicht vorstellen, wie ich eine Kombination von @ verwenden solmap, flatten, flat_map oder andere effizientereEnumerable -Methoden, um dies zu erreichen, ohne eine C ++ - artige Vorbelegungs- und Bestückungsschleife zu schreiben. Kann sich jemand einen rubinistischeren Weg vorstellen, dies zu tun?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage