min*_*sky 2 ruby ruby-on-rails ruby-on-rails-3
我有一个带有哈希的元列的用户模型,例如{"version"=>"1.0","country"=>"UK"}
在任何密钥中计算每个单独值的最佳实践/有效方法是什么?所以我可能想知道有多少记录有country = UK或USA或France等.我事先并不知道每个键中的所有可能值...
我想我可以在一个大循环中做到这一点
User.all.each do |user|
user.meta["country"] ..........
Run Code Online (Sandbox Code Playgroud)
但是有更好的方法吗?
Cho*_*ett 10
是的,有 group_by
arr = [{"version" => "1.0", "country" => "UK"},
{"version" => "1.0", "country" => "France"},
{"version" => "1.0", "country" => "UK"},
{"version" => "1.0", "country" => "USA"},
{"version" => "1.0", "country" => "France"},
{"version" => "1.0", "country" => "UK"}]
grouped = arr.group_by {|el| el["country"]}
#=> {"UK"=>[{"version"=>"1.0", "country"=>"UK"},
# {"version"=>"1.0", "country"=>"UK"},
# {"version"=>"1.0", "country"=>"UK"}],
# "France"=>[{"version"=>"1.0", "country"=>"France"},
# {"version"=>"1.0", "country"=>"France"}],
# "USA"=>[{"version"=>"1.0", "country"=>"USA"}]}
grouped.map {|k,v| [k, v.length]}
# => [["UK", 3], ["France", 2], ["USA", 1]]
Run Code Online (Sandbox Code Playgroud)