有沒有簡單的方法來獲得集合中屬性的平均值?Ruby on Rails平均水平?
例如,每個用戶都有一個分數。
鑑於用戶集合(@users),您如何獲得該組的平均分數?
有沒有像@ users.average(:score)的東西?我覺得我碰到這樣的事情對於數據庫字段來了,但我需要它的採集工作...
有沒有簡單的方法來獲得集合中屬性的平均值?Ruby on Rails平均水平?
例如,每個用戶都有一個分數。
鑑於用戶集合(@users),您如何獲得該組的平均分數?
有沒有像@ users.average(:score)的東西?我覺得我碰到這樣的事情對於數據庫字段來了,但我需要它的採集工作...
對於你的問題,我們可以真正做到:
@users.collect(&:score).sum.to_f/@users.length if @users.length > 0
早些時候我想,@users .collect(&:分數)。平均值工作。對於數據庫字段,User.average(:score)將起作用。您還可以添加:像其他activerecord查詢一樣的條件。
我用這種方法擴展我們的朋友陣:
class Array
# Calculates average of anything that responds to :"+" and :to_f
def avg
blank? and 0.0 or sum.to_f/size
end
end
這裏有一個小片段,不僅得到了平均水平,但也是標準偏差。
class User
attr_accessor :score
def initialize(score)
@score = score
end
end
@users=[User.new(10), User.new(20), User.new(30), User.new(40)]
[email protected](0){|acc, user| acc + user.score}/@users.length.to_f
stddev = Math.sqrt(@users.inject(0) { |sum, u| sum + (u.score - mean) ** 2 }/@users.length.to_f)
很不錯的。 &in&:得分是做什麼的? – David 2009-06-12 05:12:19
&符號運算符是@ users.collect {| user | user.score} 瞭解了更多關於它的網站: http://eli.thegreenplace.net/2006/04/18/understanding-ruby-blocks-procs-and-methods/ – 2009-06-12 05:22:23