如何修改Ruby代码获取所有可能求和结果的最值、均值与中位数
帮你优化Ruby代码,直接计算求和结果的统计值
嘿,作为Ruby新手能想到优化流程、不用手动导Excel计算,真的超棒!我来帮你把代码改成直接输出你需要的最小值、最大值、均值和中位数,一步到位~
先理清楚思路
首先假设你现在的代码已经能生成所有求和结果的数组(比如叫sum_results),我们只需要在这个数组基础上调用Ruby自带的方法,再加上一点点逻辑就能算出四个统计值了。
完整示例代码
# 这里替换成你自己生成所有求和结果的代码 # 举个例子:比如计算数组中两两组合的和 numbers = [1, 3, 5, 7] sum_results = numbers.combination(2).map { |pair| pair.sum } # 开始计算统计值 min_sum = sum_results.min max_sum = sum_results.max average_sum = sum_results.sum.to_f / sum_results.size # 计算中位数(需要先排序) sorted_sums = sum_results.sort total = sorted_sums.size median_sum = if total.odd? sorted_sums[total / 2] else (sorted_sums[(total / 2) - 1] + sorted_sums[total / 2]).to_f / 2 end # 友好输出结果 puts "最小值(Min): #{min_sum}" puts "最大值(Max): #{max_sum}" puts "均值(Average): #{average_sum.round(2)}" # 保留两位小数更易读 puts "中位数(Median): #{median_sum}"
逐行解释(新手友好版)
- 最小值/最大值:Ruby数组自带
min和max方法,直接调用就能拿到结果,不用自己写循环判断,超级省心! - 均值:先用
sum方法求所有和的总和,转成to_f是为了避免Ruby的整数除法(比如10/3会得到3而不是3.33),除以数组长度size就得到均值了,最后用round(2)可以保留两位小数,看起来更舒服。 - 中位数:首先得把求和结果排序,然后看数组长度是奇数还是偶数:
- 如果是奇数,直接取中间索引的元素(比如长度为5,索引2就是中间值);
- 如果是偶数,取中间两个元素的平均值,同样转成浮点数保证结果准确。
小提示
如果你的求和结果非常多(比如几十万条),可以不用生成完整的sum_results数组,而是在生成每个和的时候就跟踪最小值、最大值和总和,这样能节省内存。不过对于新手来说,先保留完整数组的方式更直观,等你熟悉Ruby之后再优化也完全没问题~
内容的提问来源于stack exchange,提问作者johnny
相关产品推荐
相关产品推荐

