29

我正在用 Ruby 创建一个箱线图生成器,我需要计算一些东西。

假设我有这个数组:

arr = [1, 5, 7, 2, 53, 65, 24]

如何从上述数组中找到最小值 (1)、最大值 (65)、总计 (157)、平均值 (22.43) 和中值 (7)?

谢谢

4

2 回答 2

64
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
于 2010-06-03T15:53:21.977 回答
1

找到最小值、最大值、总和和平均值很简单,可以在线性时间内轻松完成,如上面 sepp2k 的答案所示。

找到中位数并不那么简单,而且简单的实现(排序,然后取中间元素)在 O(nlogn) 时间内运行。

但是,有一些算法可以在线性时间内找到中位数(例如 5 的中位数算法)。其他人甚至适用于任何类型的订单统计(例如,您想找到第 5 个最小的元素)。这些问题是你必须自己实现它们,我知道没有 Ruby 实现。

O(nlogn) 已经相当快了,所以如果您不打算处理庞大的数据集(并且无论如何您都需要对数据进行排序),那么您就可以了。

于 2012-12-26T18:42:14.113 回答