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