分配给数组并替换出现的nil值

问候!

如下所示为数组赋值时,如何将nil s替换为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 { |e| e.nil? ? 0 : e } array.map { |e| e.nil? ? 0 : e } ,但是……

谢谢!

没有内置函数来替换数组中的nil ,所以是的, map是要走的路。 如果较短的版本会让你更快乐,你可以这样做:

 array.map {|e| e ? e : 0} 

要在分配后更改数组:

 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] 

要更改arrays

 array.map!{|x|x ?x:0} 

如果数组可以包含false ,则需要使用它

 array.map!{|x|x.nil? ? 0:x} 

nil.to_i为0,如果所有数字都是整数,则下面应该有效。 我认为这也是最简短的答案。

 array.map!(&:to_i) 
 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]