从Ruby中的数组中查找最高,最低,总计,平均值和中位数

27 ruby arrays math boxplot

我在Ruby中创建一个boxplot生成器,我需要计算一些东西.

假设我有这个数组:

arr = [1, 5, 7, 2, 53, 65, 24]
Run Code Online (Sandbox Code Playgroud)

如何从上面的数组中找到最低值(1),最高值(65),总数(157),平均值(22.43)和中位数(7)?

谢谢

sep*_*p2k 62

lowest = arr.min
highest = arr.max
total = arr.inject(:+)
len = arr.length
average = total.to_f / len # to_f so we don't get an integer result
sorted = arr.sort
median = len % 2 == 1 ? sorted[len/2] : (sorted[len/2 - 1] + sorted[len/2]).to_f / 2
Run Code Online (Sandbox Code Playgroud)

  • 如果`arr.length`可以被2整除,你需要对中位数更加小心.一个应该始终有效的方法是`do sortedarr = arr.sort; medpt1 = arr.length/2; medpt2 =(arr.length + 1)/ 2; (sortedarr [medpt1] + sortedarr [medpt2]).to_f/2; 结束了,但显然这更贵,而且不如你在答案中所拥有的那么漂亮和漂亮. (4认同)
  • @GregCampbell:`arr.inject(:+)`没有调用`Symbol#to_proc`,在给定一个符号时,它会直接调用`rb_funcall`(这比传递一个块快得多(或者使用Symbol#to_proc更糟)) .但你是对的,它只适用于1.8.7+. (3认同)