Рубиновое внутреннее выравнивание (массив массивов)
У меня есть массив, как следующий
[
[[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 способ сделать это?