对于这个可能很愚蠢的问题,我深表歉意,我是 Ruby 和一般代码的绝对初学者。
我已经用一些预先确定的值设置了一个散列。我想询问用户输入,如果该输入与现有键匹配,我希望更新相应的值(在本例中为 + 1)。然后我想打印所有当前的最新值。
hash = {"apple": 6, "banana": 2, "carrot": 3}
order = gets.chomp.downcase
hash.each do |key, value|
if key.to_s == order
value += 1
puts "Your order includes: #{value} #{key}."
end
end
我的问题是我只知道如何打印单个键值对。
例如如果用户输入“苹果”,我希望输出显示“您的订单包括:7 个苹果、2 个香蕉、3 个胡萝卜。”
最佳答案
hash = {apple: 6, banana: 2, carrot: 3}
order = gets.chomp.downcase.to_sym
hash[order] = hash.fetch(order, 0) + 1
puts "Your order includes: " + hash.map { |k, v| "#{v} #{k}" }.join(", ")
一些注意事项:
您的哈希初始化
hash = {"apple": 6, "banana": 2, "carrot": 3}
。散列的键看起来是字符串,但如果您将这种语法与冒号一起使用,它们就会变成符号。所以,你有两个选择。这种语法:hash = {"apple" => 6, "banana" => 2, "carrot" => 3}
或者您可以像我一样使用符号并将用户输入转换为符号
散列的真正妙处在于,您无需遍历元素即可找到所需内容。键和值之间存在映射关系,因此很容易找到和更新值
在第三行,我正在处理 key 不能在散列中的事实,在这种情况下我使用
fetch
得到 0。然后,我递增并分配回那个键
关于ruby - 如何打印 Ruby 哈希中的所有键值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55654170/