我有一个格式为
的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
块并使用if语句的情况下计算对象类型?
答案 0 :(得分:4)
您可以使用each_with_object
创建一个json['body'].each_with_object(Hash.new(0)) { |a, h| h[a['type']] += 1 }
#=> {"user"=>5, "admin"=>7, ...}
对的哈希:
TSMessage.showNotificationWithTitle("Success Notification !!!", type: .Success)
答案 1 :(得分:0)
您可以使用一个each
counts = { "user" => 0, "admin" => 0, "whatever" => 0 }
json["body"].each do |a|
counts[a.type] += 1
end
counts["user"] #=> 1
counts["admin"] #=> 2
counts["whatever"] #=> 3