Ruby on Rails字段平均值?

有没有一种简单的方法来获取集合中属性的平均值?

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

给定一组用户(@users),您如何获得该组的平均分数?

有没有像@ users.average(:score)这样的东西? 我想我在数据库领域遇到过类似的东西,但是我需要它来为一个集合工作……

对于你的问题,实际上可以做到:

@users.collect(&:score).sum.to_f/@users.length if @users.length > 0 

我以前想过,@ users.collect(&:score).average会有效。 对于数据库字段,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)] 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 ) 
Interesting Posts