Ruby on Rails的场平均?
-
13-09-2019 - |
题
有一种简单的方式获得的属性的集合中的平均?
例如,每个用户都有一个分数。
考虑到用户(S)(@users)的集合,你怎么能得到该组的平均分?
有没有像@ users.average东西(:成绩)?我觉得我碰到这样的事情对于数据库字段来了,但我需要它的采集工作...
解决方案
对于你的问题,我们可以真正做到:
@users.collect(&:score).sum.to_f/@users.length if @users.length > 0
此前我以为,@ users.collect(:分)。平均会工作。对于数据库字段,User.average(:得分)会工作。您还可以添加:条件像其他的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)]
mean=@users.inject(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 )
不隶属于 StackOverflow