在Ruby中更新特定值

在Ruby中更新特定值,ruby,hash,Ruby,Hash,我刚从Ruby开始我的冒险,我有个问题。我已经完成了Codecademy的Ruby课程,所以我不是那么新手,但我仍然不知道太多。无论如何如何使用公式更新特定值?比如,我想用下面的散列来做些什么: hash = { "s1" => 2, "s2" => 3 } 接下来我要做的是,通过gets.chomp获取输入以获取密钥,然后获取要添加到value(也通过gets.chomp)的金额。以下是我尝试过但未成功的方法: name = gets.chomp value = gets.cho

我刚从Ruby开始我的冒险,我有个问题。我已经完成了Codecademy的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

在一个块内,
x
y
都是局部变量,更新它们不会产生任何影响。您可以
映射

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})

在块内,
x
y
都是局部变量,更新它们不会产生任何影响。您可以
映射

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})

哈!非常感谢。现在我可以继续了。我把事情搞得太复杂了。必须更仔细地阅读文档。干杯,哈!非常感谢。现在我可以继续了。我把事情搞得太复杂了。必须更仔细地阅读文档。干杯