问候!
如下所示为数组分配值时,如何将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 }
,但还是......
谢谢!
答案 0 :(得分:12)
分配后更改数组:
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]
答案 1 :(得分:7)
没有内置函数来替换数组中的nil
,所以是的,map
是可行的方法。如果较短的版本会让你更快乐,你可以这样做:
array.map {|e| e ? e : 0}
答案 2 :(得分:1)
要更改阵列
array.map!{|x|x ?x:0}
如果数组可以包含false
,则需要使用此代码
array.map!{|x|x.nil? ? 0:x}
答案 3 :(得分:1)
a.select { |i| i }
这个答案太短了,所以我再补充几句话。
答案 4 :(得分:1)
nil.to_i为0,如果所有数字都是整数,则下面应该有效。我认为这也是最简短的答案。
array.map!(&:to_i)
答案 5 :(得分:0)
另一种方法是定义自己的函数,为数组添加值。
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]