有一种简单的方式获得的属性的集合中的平均?

例如,每个用户都有一个分数。

考虑到用户(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 )
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top