如何打印 Ruby 哈希中的所有键值对?

run*_*m90 2 ruby hash

对于这个可能很愚蠢的问题,我深表歉意,总的来说,我是 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 个胡萝卜”。

Urs*_*sus 5

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 。然后,我递增并分配回该键