你好!
当像下面这样给数组赋值时,如何将nil
替换为0
?
array = [1,2,3]
array[10] = 2
array # => [1, 2, 3, nil, nil, nil, nil, nil, nil, nil, 2]
如果在分配时无法实现,那么我应该如何以最佳方式进行操作呢?我考虑使用
array.map { |e| e.nil? ? 0 : e }
,但是......谢谢!你好!
当像下面这样给数组赋值时,如何将nil
替换为0
?
array = [1,2,3]
array[10] = 2
array # => [1, 2, 3, nil, nil, nil, nil, nil, nil, nil, 2]
array.map { |e| e.nil? ? 0 : e }
,但是......谢谢!要改变赋值后的数组:
array.map! { |x| x || 0 }
请注意,这也会将false
转换为0
。i = 10
a = [1, 2, 3]
a += ([0] * (i - a.size)) << 2
# => [1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 2]
没有内置函数可以替换数组中的nil
,所以是的,map
是正确的方法。如果更短的版本会让您更高兴,您可以这样做:
array.map {|e| e ? e : 0}
如果所有数字都是整数,则nil.to_i为0,下面的代码应该有效。我认为这也是这里最短的答案。
array.map!(&:to_i)
要原地修改数组
array.map!{|x|x ?x:0}
false
,则需要使用这个。array.map!{|x|x.nil? ? 0:x}
a.select { |i| i }
这个答案太短了,所以我要再加上几个词。
class Array
def addpad(index,newval)
concat(Array.new(index-size,0)) if index > size
self[index] = newval
end
end
a = [1,2,3]
a.addpad(10,2)
a => [1,2,3,0,0,0,0,0,0,0,2]