【问题标题】:How to iterate through an array of hashes in ruby如何遍历ruby中的哈希数组
【发布时间】:2018-06-26 15:57:06
【问题描述】:

尝试使用 ruby​​ 遍历数组,结果惨遭失败,

My Array
people = [{first_name: "Gary", job_title: "car enthusiast", salary: "14000" },
{first_name: "Claire", job_title: "developer", salary: "15000"},
{first_name: "Clem", job_title: "developer", salary: "12000"}]

如何遍历上面的散列只输出工资值???

我尝试使用:

people.each do |i,j,k|
  puts "#{i}"
end

结果如下,不是我想要的,

{:first_name=>"Gary", :job_title=>"car enthusiast", :salary=>"14000"}
{:first_name=>"Claire", :job_title=>"developer", :salary=>"15000"}
{:first_name=>"Clem", :job_title=>"developer", :salary=>"12000"}

有没有办法遍历这个数组,只列出工资值而不列出其他值?

【问题讨论】:

  • people.each { |person| puts person[:salary] }

标签: ruby-on-rails ruby ruby-on-rails-3


【解决方案1】:

在较新版本的 Ruby 中(不确定何时引入,可能是在 ruby​​ 2.0-ish 左右,我认为引入了关键字参数),您可以这样做:

people.each do |salary:,**|
  puts salary
end

其中** 获取所有您未命名的关键字参数并将它们吞下(即散列中的first_namejob_title 键)。如果这不是您的 ruby​​ 版本所允许的,您只需将整个哈希存储在变量中:

people.each do |person|
  puts person[:salary]
end

【讨论】:

  • 是否可以在同一行中获取值,我的查询现在运行为 people.each {|x| puts x[:job_title], x[:first_name], x[:salary]} 目前输出如下: 192:rubyfiles root# ruby​​ test.rb 汽车爱好者 Gary 14000 developer Claire 15000 developer Clem 12000
  • 好的,所以它将每个值显示在单独的行上,而您只想将它​​们全部放在一行上?您可以使用 p [x[:job_title], x[:first_name], x[:salary]] 或仅使用任何 ruby​​ 的字符串格式化选项或其字符串插值
  • 还是一样的结果。汽车爱好者 Gary 14000 开发者 Claire 15000 开发者 Clem 12000 people.each {|x|将 [x[:job_title], x[:first_name], x[:salary]]}
  • p 不是puts...有区别
  • 我想知道如何在 ruby​​ > 2.7 中使用命名关键字参数,当你迭代一个哈希数组时
猜你喜欢
  • 2014-12-30
  • 1970-01-01
  • 2014-11-21
  • 2013-11-25
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2016-09-03
相关资源
最近更新 更多