Поздравления!
При присвоении значения массиву как в следующем, как я мог заменить 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 }
, но хорошо …
Спасибо!
Нет встроенной функции для замены nil
в массиве, так что да, map
- лучший вариант. Если более короткая версия сделает вас счастливее, вы можете сделать:
array.map {|e| e ? e : 0}
Чтобы изменить массив на месте
array.map!{|x|x ?x:0}
Если массив может содержать false
, вам нужно будет использовать это вместо
array.map!{|x|x.nil? ? 0:x}
Другой подход - определить вашу собственную функцию для добавления значения в массив.
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]
Чтобы изменить массив после присваивания:
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]