Gam*_*bai 1 ruby arrays flatten
在我的ruby项目中,我有一个数组数组,这是进行一些重图遍历的结果
例:
[[], [1, 2, 3, 4, 5], [[], [], [[], [], [34, 54, 23, 45]]]]
Run Code Online (Sandbox Code Playgroud)
我想要最终的产品
[[1, 2, 3, 4, 5], [34, 54, 23, 45]]
Run Code Online (Sandbox Code Playgroud)
flatten将离开我
[1, 2, 3, 4, 5, 34, 54, 23, 45]
Run Code Online (Sandbox Code Playgroud)
所以我不想那样
我被困住了,可以在如何做到这一点上使用一些帮助
到目前为止,我有
class Array
def flatten_blanks
each{ |elem| elem.flatten_blanks if elem.is_a?(Array) }
reject!{ |elem| elem.is_a?(Array) && elem.length < 1 }
self
end
end
Run Code Online (Sandbox Code Playgroud)
这很接近,但让我有类似的东西
[[[[[[[1, 2, 3, 4, 5]]]]]]], [[[[[[[34, 54, 23, 45]]]]]]]
Run Code Online (Sandbox Code Playgroud)
squeeze = -> (arr, acc = []) do
case arr.compact.first
when NilClass then acc
when Array
arr.reject(&:empty?).map { |e| squeeze.(e, acc) }.first
else acc << arr
end
end
squeeze.(arr)
#? [[1, 2, 3, 4, 5], [34, 54, 23, 45]]
Run Code Online (Sandbox Code Playgroud)