我使用此代码来计算一些数字的平均值 - 请注意,rankings
列已序列化并包含哈希:
@reviews.collect{|review| review.rankings[label].to_i}.sum.to_f/@reviews.length if @reviews.length > 0
此代码的缺点是:如果其中一个值为nil
,则计算平均值时就好像它以零存在一样。问题基本上是 @reviews.length
分母假设每条评论都有相关值。
如何从分母中排除那些不重要的评论?
非常感谢您的回答。问题最终出在分母上,即 /@reviews.length
部分。当我在分子和分母上使用 reject
时,方程停止除以总长度并开始除以(长度 - nils 数)。
最终结果 - 2 个分数 [0 和 100] 平均为 50; [nil 和 100] 平均为 100。
最佳答案
Array#reject
来救援。
@reviews.reject{|review| review.rankings[label].nil?}.collect{|review| review.rankings[label].to_i}.sum.to_f/@reviews.length if @reviews.length > 0
关于ruby-on-rails - Rails 平均值 - 仅在值 <> 0 时收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5301646/