使用.flatten
是一个方便的小技巧,可以获取一个子数组并将其转换为单个数组。
例如:[[1,3],2,[5,8]].flatten
=> [1,3,2,5,8]
您甚至可以将[1,[2,nil],3].flatten
列为[1,2,nil,3]
。
这种方法在嵌套.map
方法时非常有用,但是如何计算空子数组呢?例如:[1,[2,3],[],4].flatten
会返回[1,2,3,4]
...但是,如果我需要跟踪空子数组,可能会将结果转换为[1,2,3,0,4]
或[1,2,3,nil,4]
有没有优雅的方法来做到这一点?或者我是否需要编写一些方法来迭代每个子数组并逐个检查它?
答案 0 :(得分:6)
如果您不需要递归检查嵌套的子数组:
[1,[2,3],[],4].map { |a| a == [] ? nil : a }.flatten
答案 1 :(得分:2)
首先将空数组映射到nil
s,然后展平
[1,2,[1,2,3],[]].map{|x| if x.is_a? Array and x.empty? then nil else x end}.flatten