我有一個帶有散列元列的用戶模型,例如{「version」=>「1.0」,「country」=>「UK」}Rails:計算散列鍵值的最佳做法
什麼是最好的做法/有效的方法來計算任何關鍵的每個個人價值觀?所以,我可能會想弄清楚有多少記錄具有國家=英國或美國或法國等我不知道事先每個鍵的所有可能的值...
我想我可以在一個大循環做
User.all.each do |user|
user.meta["country"] ..........
但是有沒有更好的方法來做到這一點?
我有一個帶有散列元列的用戶模型,例如{「version」=>「1.0」,「country」=>「UK」}Rails:計算散列鍵值的最佳做法
什麼是最好的做法/有效的方法來計算任何關鍵的每個個人價值觀?所以,我可能會想弄清楚有多少記錄具有國家=英國或美國或法國等我不知道事先每個鍵的所有可能的值...
我想我可以在一個大循環做
User.all.each do |user|
user.meta["country"] ..........
但是有沒有更好的方法來做到這一點?
是的,有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]]
你可以這樣做,算誰擁有薈萃所有用戶[「國家」] ==「UK」
User.all.inject{|count, u| count += 1 if u.meta['country'] == 'UK'}
這將在未來得心應手。非常感謝! – minovsky
如果你已經連載於SQL數據庫值,這只是這個值的工作迭代方式他們。但一些NOSQL BD的允許使用BD的工具(如蒙戈)
可以讓數據庫做的工作,如果你沒有序列化的字段成元與這些值iteract柱。我看不到如何避免循環所有記錄。 – Mischa