Присвойте массиву и замените, появился нулевые значения

Поздравления!

При присвоении значения массиву как в следующем, как я мог заменить nils 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 }, но хорошо …

Спасибо!

7
задан Tobias 27 March 2010 в 01:12
поделиться

4 ответа

Нет встроенной функции для замены nil в массиве, так что да, map - лучший вариант. Если более короткая версия сделает вас счастливее, вы можете сделать:

array.map {|e| e ? e : 0}
8
ответ дан 6 December 2019 в 07:25
поделиться

Чтобы изменить массив на месте

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

Если массив может содержать false , вам нужно будет использовать это вместо

array.map!{|x|x.nil? ? 0:x}
1
ответ дан 6 December 2019 в 07:25
поделиться

Другой подход - определить вашу собственную функцию для добавления значения в массив.

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]
0
ответ дан 6 December 2019 в 07:25
поделиться

Чтобы изменить массив после присваивания:

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]
12
ответ дан 6 December 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: