ruby - 在一次迭代中计算数组对象类型

标签 ruby ruby-on-rails-3

我有一个格式为 JSON 的

{body => ["type"=>"user"...], ["type"=>"admin"...]}

我想按类型对对象进行计数,但我不想将数组迭代三次(那是我有多少个不同的对象),所以这行不通:

  @user_count = json["body"].count{|a| a['type'] == "user"}
  @admin_count = json["body"].count{|a| a['type'] == "admin"}
  ...

是否有一种无需执行 .each block 和使用 if 语句即可计算对象类型的智能方法?

最佳答案

你可以使用 each_with_object使用 type => count 对创建哈希:

json['body'].each_with_object(Hash.new(0)) { |a, h| h[a['type']] += 1 }
#=> {"user"=>5, "admin"=>7, ...}

关于ruby - 在一次迭代中计算数组对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31242798/

相关文章:

Ruby 获取当前文件的父目录

ruby-on-rails - 自动将子类添加到注册表

ruby - 为什么这个在类中定义的 Albacore 任务不起作用?

ruby-on-rails - 我如何将 'join' 数组添加到结果字符串的开头以加入第一个字符?

ruby-on-rails-3 - 无法访问 Rails 控制台中的模型

ruby-on-rails - 通过另一台机器请求

ruby-on-rails - 将业务规则移动到模型中

sql - Heroku - 每个月的第一天更新数据库列

ruby-on-rails-3 - capybara 和形成

ruby - Rails 正确使用 Unless with And 运算符