ruby flatten和紧凑的数组充满了空数组

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)

Ale*_*kin 9

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)