Arrays Ruby-优雅地展平阵列,但不';t忽略空子数组

Arrays Ruby-优雅地展平阵列,但不';t忽略空子数组,arrays,ruby,flatten,sub-array,Arrays,Ruby,Flatten,Sub Array,使用.flatte是一个方便的小技巧,可以将子数组的数组转换为单个数组。 例如:[[1,3],2[5,8]]。展平=>[1,3,2,5,8] 您甚至可以包含nil[1,2,nil],3]。展平将导致[1,2,nil,3] 这种方法在嵌套.map方法时非常有用,但是如何解释空子数组呢?例如:[1,2,3],[4].flatten将返回[1,2,3,4]。。。但是如果我需要跟踪空子数组,可能会将结果转换为[1,2,3,0,4]或[1,2,3,nil,4] 有什么优雅的方法可以做到这一点吗?或者我需要

使用
.flatte
是一个方便的小技巧,可以将子数组的数组转换为单个数组。 例如:
[[1,3],2[5,8]]。展平
=>
[1,3,2,5,8]
您甚至可以包含nil
[1,2,nil],3]。展平将导致
[1,2,nil,3]

这种方法在嵌套
.map
方法时非常有用,但是如何解释空子数组呢?例如:
[1,2,3],[4].flatten
将返回
[1,2,3,4]
。。。但是如果我需要跟踪空子数组,可能会将结果转换为
[1,2,3,0,4]
[1,2,3,nil,4]


有什么优雅的方法可以做到这一点吗?或者我需要编写一些方法来遍历每个单独的子数组并逐个检查它吗?

首先将空数组映射到
nil
s,然后展平

[1,2,[1,2,3],[]].map{|x| if x.is_a? Array and x.empty? then nil else x end}.flatten

首先将空数组映射到
nil
s,然后展平

[1,2,[1,2,3],[]].map{|x| if x.is_a? Array and x.empty? then nil else x end}.flatten

如果不需要递归检查嵌套子数组:

[1,[2,3],[],4].map { |a| a == [] ? nil : a }.flatten

如果不需要递归检查嵌套子数组:

[1,[2,3],[],4].map { |a| a == [] ? nil : a }.flatten

您需要检查嵌套的空数组吗,即
[1,2,3,[]],4]
?您需要检查嵌套的空数组吗,即
[1,2,3,[]],4]
?这比我的要干净一点。我把a=[]改成了a,有吗?但类似的概念。。。出于某种原因,我总是忽略将逻辑放入.map块中。@jkessluk不会吗?阻塞不是数组的项?是的,但我在助手方法中使用了它,我已经确保传递的项是数组。否则,是的。你说得对。这比我的要干净一点。我把a=[]改成了a,有吗?但类似的概念。。。出于某种原因,我总是忽略将逻辑放入.map块中。@jkessluk不会吗?阻塞不是数组的项?是的,但我在助手方法中使用了它,我已经确保传递的项是数组。否则,是的。你说得对。