Nested array delete nil

来源:互联网 发布:c语言学生选课管理系统 编辑:程序博客网 时间:2024/05/29 15:10

I have nested array like this:

['foo', [nil], 'baz', ['bar'], nil, ['zoo']]

as elegantly remove nil but leave empty arrays?*I expect to see:

I would do as below :

a = ['foo', [nil], 'baz', ['bar'], nil, ['zoo']]a.map { |e| e.is_a?(Array) ? e.compact : e }.compact# => ['foo', [], 'baz', ['bar'], ['zoo']]

Update:

a.map { |e| e.instance_of?(Array) ? e.compact : e }.compact

Try the code:

array = ['foo', [nil], 'baz', ['bar'], nil, ['zoo']]array.map! {|v| v.is_a?( Array ) && v.compact || v }.compact# => ["foo", [], "baz", ["bar"], ["zoo"]] 

or more flexible:

array.map! {|v| v.respond_to?( :compact ) && v.compact || v }.compact# => ["foo", [], "baz", ["bar"], ["zoo"]] 

or with trap:

array.map! {|v| v.compact rescue v }.compact# => ["foo", [], "baz", ["bar"], ["zoo"]] 

                                             
0 0
原创粉丝点击