如果我的所有元素都是 nil,如何从数组末尾剥离 nil 元素?
How do I strip off nil elements from the end of an array if all my elements are nil?
我正在使用 Ruby 2.4。我想从数组末尾剥离 nil
个元素,所以我使用
row_data.pop until row_data.last
但是如果数组只包含 nil
个元素,这似乎会导致某种无限循环,因为调用永远不会 returns。我如何解释数组可能包含所有 nil 元素的事实?
只需添加一个额外的检查以查看数组是否为空。
row_data.pop until row_data.last || row_data.empty?
可以用Array#rindex获取right-mostnon-nil项(或者确定数组中的每个元素都是nil
)。
def kill_nils_at_end(arr)
ndx = arr.rindex(&:itself)
ndx ? arr[0..ndx] : []
end
kill_nils_at_end [1,nil,1,nil,nil,nil]
#=> [1, nil, 1]
kill_nils_at_end [nil,nil,nil,nil,nil,nil]
#=> []
这不会改变原始数组。如果您想就地修改数组,请将倒数第二行更改为
arr.replace(ndx ? arr[0..ndx] : [])
试试这个
最易读
arr = arr.reverse.drop_while(&:nil?).reverse
效率最高
arr.slice!(0..arr.rindex { |each| nil != each }.to_i)
如果要删除所有 nil
,试试这个:
[1, nil, 3, nil, nil].compact #= [1,3]
见Map and Remove nil values in Ruby
我正在使用 Ruby 2.4。我想从数组末尾剥离 nil
个元素,所以我使用
row_data.pop until row_data.last
但是如果数组只包含 nil
个元素,这似乎会导致某种无限循环,因为调用永远不会 returns。我如何解释数组可能包含所有 nil 元素的事实?
只需添加一个额外的检查以查看数组是否为空。
row_data.pop until row_data.last || row_data.empty?
可以用Array#rindex获取right-mostnon-nil项(或者确定数组中的每个元素都是nil
)。
def kill_nils_at_end(arr)
ndx = arr.rindex(&:itself)
ndx ? arr[0..ndx] : []
end
kill_nils_at_end [1,nil,1,nil,nil,nil]
#=> [1, nil, 1]
kill_nils_at_end [nil,nil,nil,nil,nil,nil]
#=> []
这不会改变原始数组。如果您想就地修改数组,请将倒数第二行更改为
arr.replace(ndx ? arr[0..ndx] : [])
试试这个
最易读
arr = arr.reverse.drop_while(&:nil?).reverse
效率最高
arr.slice!(0..arr.rindex { |each| nil != each }.to_i)
如果要删除所有 nil
,试试这个:
[1, nil, 3, nil, nil].compact #= [1,3]
见Map and Remove nil values in Ruby