为什么我不能在 ruby 中更新哈希值?

Why I can't keep the hash updated in ruby?

我需要根据用户的需要使用尽可能多的项目来更新此散列。我在更新它时遇到问题。 它只显示用户的最后输入。

比如i = 2,hash只会显示第二个键和加的值,我两个都想要。或者如果 i = 3 我需要所有三个输入。

puts "how may items to add in hash?" 

i=gets.chomp.to_i
for i in 1..i
            puts "add key"
             key = gets.chomp                   
            puts "add value"
             value = gets.chomp.to_f.round(2)

            project = Hash.new()
            project = {key => value}

            project.each do |key, value|
            puts "#{key} \t - \t #{value}%"
            end
end

有人可以帮忙吗?

只需将您的变量初始化移动到我们的循环中。现在,您在每次迭代时都使用空白哈希重写您的项目。这就是它只存储最后一项的原因。这是您可能的代码:

puts "how may items to add in hash?"

project = {}
i=gets.chomp.to_i

for i in 1..i
  puts "add key"
  key = gets.chomp                   
  puts "add value"
  value = gets.chomp.to_f.round(2)

  project[key] = value
end

project.each do |key, value|
  puts "#{key} \t - \t #{value}%"
end

project.values.inject(&:+)

PS:比 Hash.new() 更喜欢 {} (https://github.com/bbatsov/ruby-style-guide#literal-array-hash)