Ruby on rails Rails:在散列中计算键值的最佳实践
我有一个用户模型,它有一个带有散列的元列,例如{“version”=>“1.0”,“country”=>“UK”} 计算任何键中每个值的最佳实践/有效方法是什么?因此,我可能想计算出有多少记录的国家=英国、美国或法国等。我事先不知道每个键中所有可能的值 我想我可以做一个大循环Ruby on rails Rails:在散列中计算键值的最佳实践,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有一个用户模型,它有一个带有散列的元列,例如{“version”=>“1.0”,“country”=>“UK”} 计算任何键中每个值的最佳实践/有效方法是什么?因此,我可能想计算出有多少记录的国家=英国、美国或法国等。我事先不知道每个键中所有可能的值 我想我可以做一个大循环 User.all.each do |user| user.meta["country"] .......... 但是有没有更好的方法呢?你可以这样做来统计所有拥有meta['country']=='UK'的用户 Us
User.all.each do |user|
user.meta["country"] ..........
但是有没有更好的方法呢?你可以这样做来统计所有拥有meta['country']=='UK'的用户
User.all.inject{|count, u| count += 1 if u.meta['country'] == 'UK'}
若您在sql DB中序列化了值,那个么使用这些值来迭代它们是唯一的方法。但是一些NOSQL BDs允许使用BD的工具(如mongo)提取这些值是的,有
groupby
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]]
如果没有将字段序列化为元列,则可以让数据库来完成这项工作。我不知道如何避免在所有记录中循环。这看起来很有希望,但如何从我的模型中获得“arr”的结构?我试过了
User.all.group_by{| meta | meta[“country”]}。map do{k,v |[k,v.length]}
但似乎没有效果?试着User.all.group_by{| User | User.meta[“country”}…
。记住,User.all
返回一个User
s的“数组”,而不是meta
列。你是对的!!!这太棒了!!!非常感谢:)一个小提示:我在没有地图步骤中的do
的情况下完成了这项工作。你是对的;从我的irb会议中滑入转录。现在已修复。这将在将来很方便。多谢!