Ich habe ein Array wie folgtRubin inneren Flatten (Array von Arrays)
[
[[0, :a], [2, :b]],
[3, :c],
[4, :d],
[[5, :e], [6, :f], [7, :g]]
]
Das heißt, ein Array von Elementen, die entweder (1) 2-Element-Arrays, oder (2) ein Array von 2-Element-Arrays.
Ich versuche eine elegante Möglichkeit zu finden, dieses Array so zu "glätten", dass Elemente (2) in Elemente auf Root-Ebene expandiert werden. In diesem Beispiel:
[[0, :a], [2, :b], [3, :c], [4, :d], [5, :e], [6, :f], [7, :g]]
Das ist fast wie Array#flatten(depth)
, mit der Ausnahme depth
Bedürfnisse von innen heraus zu arbeiten, anstatt außen in
Die tatsächlichen Arrays sehr groß werden können, so dass ich dies nicht tun. möchte aus Leistungsgründen Elemente in ein neues Array in einer Schleife schieben (<<
). Aus irgendeinem Grund kann ich nicht daran denken, wie man eine Kombination von map
, flatten
, flat_map
oder andere effizientere Enumerable
Methoden verwenden kann, um dies zu erreichen, ohne eine C++ - Art Vorbelegung-und-füllen-Schleife zu schreiben. Kann jemand an einen mehr ryxistischen Weg denken, dies zu tun?