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

标签 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

我的问题是我只知道如何打印单个键值对。

例如如果用户输入“苹果”,我希望输出显示“您的订单包括: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/

相关文章:

ruby - 如何在内存中创建一个git仓库?

ruby-on-rails - 安装sqlite3(1.3.11)时出错,Bundler无法继续

c - 在 C 中调整现有的 GOST 代码以散列文件

ruby - 哈希可枚举方法 : Inconsistent behavior when passing only one parameter

ruby-on-rails - Ruby Iconv 可与 irb 和 ruby​​ 调试器一起使用,但不能用于单元测试

ruby-on-rails - 从字符串数组中删除数字

ruby-on-rails - 需要在具有 Devise 注册的用户上设置关联

c# - HashAlgorithm.ComputeHash() 是有状态的吗?

algorithm - 我们可以在 O(n^2) 中做 4 和算法吗?

ruby - 如何将哈希保存到 Sequel DB?