Рубиновое внутреннее выравнивание (массив массивов)

У меня есть массив, как следующий

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

То есть Массив элементов, которые являются (1) 2-элементными Массивами или (2) Массивом 2-элементных Массивов.

Я пытаюсь найти элегантный способ «сгладить» этот массив таким образом, чтобы элементы (2) были расширены до элементов корневого уровня. В этом примере:

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

Это почти как использованиеArray#flatten(depth), Кромеdepth Нужно работать изнутри, а не снаружи.

Реальные массивы могут быть очень большими, поэтому я не хочу нажимать (<<) элементы на новый массив в цикле по соображениям производительности. По некоторым причинам я не могу думать о том, как использовать любую комбинациюmap, flatten, flat_mapили другой более эффективныйEnumerable методы для достижения этой цели без написания цикла preallocate-and -ulate в стиле C ++. Кто-нибудь может придумать более Rubyist способ сделать это?

Ответы на вопрос(2)

Ваш ответ на вопрос