【发布时间】:2016-09-13 23:54:45
【问题描述】:
我有一个类似下面的数组
[
[[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 方法的任何组合来完成此任务,而无需编写 C++ 样式的预分配和填充循环。谁能想到一个更 Rubyist 的方式来做到这一点?
【问题讨论】: