对于这个可能很愚蠢的问题,我深表歉意,总的来说,我是 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
Run Code Online (Sandbox Code Playgroud)
我的问题是我只知道如何打印单个键值对。
例如,如果用户输入“苹果”,我希望输出显示“您的订单包括: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(", ")
Run Code Online (Sandbox Code Playgroud)
一些注意事项:
你的哈希初始化hash = {"apple": 6, "banana": 2, "carrot": 3}。散列的键看起来像是字符串,但如果您使用带有冒号的语法,它们就会变成符号。所以,你有两个选择。这个语法:
hash = {"apple" => 6, "banana" => 2, "carrot" => 3}
Run Code Online (Sandbox Code Playgroud)
或者您可以像我一样使用符号并将用户输入转换为符号
哈希的真正酷之处在于您不需要遍历元素来找到您要查找的内容。键和值之间存在映射,因此可以轻松查找和更新值
在第三行中,我正在处理密钥不能在哈希中的事实,fetch在这种情况下我曾经有 0 。然后,我递增并分配回该键