2016-09-18 1 views
0

Я только начинаю свое приключение с Ruby, и у меня есть проблема. Я закончил курс Codecademy Ruby, поэтому я не ЭТО зеленый, но я все еще не знаю слишком много. Так или иначе. Как вы можете обновить определенное значение с помощью уравнения? Мол, вот что я пытаюсь сделать с помощью следующего хэш:Обновление значения в Ruby

hash = { "s1" => 2, "s2" => 3 } 

То, что я хочу делать дальше, это получить ввод, чтобы получить ключ через gets.chomp, а затем получить сумму, чтобы добавить к value (через gets.chomp). Вот что я безуспешно пытался:

name = gets.chomp 
value = gets.chomp.to_i 
hash.each do |x, y| 
    if x == name 
    y == y + value 
    else 
    puts "nope" 
    end 
end 

Я также пытался возиться с Hash#update, но не повезло. Может ли кто-нибудь помочь? Я застрял на ней, как 3 часа уже:/

Приветствия, Boberczus

ответ

2

Внутри блока, как x и y локальные переменные, обновляя их не дает никакого эффекта. Вы можете map вместо:

hash.map do |x, y| 
    [x, if x == name 
     y + value 
     else 
     puts "nope" 
     y 
     end 
    ] 
end.to_h 

Но самый простой способ будет:

if hash[name] 
    hash[name] += value 
else 
    puts "nope" 
end 

Использование обновления:

hash.update({name => value}) 
+0

Хах! Спасибо! Теперь я могу двигаться дальше. Я был полностью оскорблен. Должен читать документацию более тщательно. Приветствия. – boberczus