小编典典

如何从 Ruby 数组创建平均值?

all

如何从数组中找到平均值?

如果我有数组:

[0,4,8,2,5,0,2,6]

平均会给我 3.375。


阅读 126

收藏
2022-06-13

共1个答案

小编典典

尝试这个:

arr = [5, 6, 7, 8]
arr.inject{ |sum, el| sum + el }.to_f / arr.size
=> 6.5

请注意.to_f,您需要它来避免整数除法的任何问题。你也可以这样做:

arr = [5, 6, 7, 8]
arr.inject(0.0) { |sum, el| sum + el } / arr.size
=> 6.5

您可以将其定义Array为另一位评论者建议的一部分,但您需要避免整数除法,否则您的结果将是错误的。此外,这通常不适用于每种可能的元素类型(显然,平均只对可以平均的事物有意义)。但是,如果您想走那条路,请使用:

class Array
  def sum
    inject(0.0) { |result, el| result + el }
  end

  def mean 
    sum / size
  end
end

如果您以前从未见过inject,它并不像看起来那么神奇。它遍历每个元素,然后对其应用累加器值。然后将累加器交给下一个元素。在这种情况下,我们的累加器只是一个整数,它反映了所有先前元素的总和。

编辑: 评论者 Dave Ray 提出了一个很好的改进。

编辑:
评论者格伦杰克曼的建议,使用arr.inject(:+).to_f,也很好,但如果你不知道发生了什么,可能有点太聪明了。是:+一个符号;当传递给注入时,它将符号命名的方法(在本例中为加法运算)应用于每个元素,以对抗累加器值。

2022-06-13