Pat*_*ity 14 arrays recursion null ruby-on-rails
要将一个数组分成两个相等的部分,我会这样做,
>> a = [1,2,3,4,5]
=> [1, 2, 3, 4, 5]
>> a.in_groups_of( (a.size/2.0).ceil ) if a.size > 0
=> [[1, 2, 3], [4, 5, nil]]
现在我有一个嵌套数组,如果数组的大小是奇数,则包含nil元素.如何从嵌套数组中删除nil元素?我想做点什么,
a.compact
但不幸的是,这不起作用,ruby只删除第一级的nil元素而不是递归.ruby是否为这个问题提供了很好的解决方案?
Phi*_*oss 44
使用Ruby 1.8.7及更高版本,您可以执行以下操作:
a.each &:compact!
=> [[1, 2, 3], [4, 5]]
使用Ruby 1.8.6,您可以做到这一点很长的路要走:
a.each {|s| s.compact!}
这两个都将修改内容a.如果要返回一个新数组并保留原始数组,可以使用collect而不是each:
# 1.8.7+:
a.collect &:compact
# 1.8.6:
a.collect {|s| s.compact}