You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

统计多数组列组合重复数的两种Ruby方案哪个性能更优,为什么?

性能对比结论

方案2性能更优,二者的性能差异主要来自内存开销和遍历逻辑的复杂度差异,具体分析如下:

共同开销部分

两个方案第一步都执行了a.zip(b, c),将三个数组合并为元素是三元组的新数组,这一步的时间、内存开销完全一致,差异在后续的重复统计逻辑。

方案1的额外开销

  • group_by操作会为每个唯一的三元组构建一个存储所有匹配元素的数组,假设某三元组重复N次,就要额外存储N个元素的数组,内存开销随数组总长度线性增长,构建这些数组也会产生额外CPU消耗
  • 额外执行了一次select全哈希遍历,过滤出现次数≤1的分组,属于冗余遍历
  • 总计需要执行3次全量/半全量遍历:group_by遍历、select遍历、求和遍历

方案2的优势

  • 直接统计每个三元组的出现次数,哈希的value仅存储整数计数,不需要存储全部分组元素,内存开销仅和唯一三元组的数量成正比,重复数据越多,内存优势越明显
  • 不需要做冗余的分组数组构建、过滤操作,CPU指令数远低于方案1
  • 总计只需要2次全量/半全量遍历:计数遍历、哈希求和遍历,遍历次数更少

可优化的简化版本

你还可以进一步优化方案2,把两次哈希遍历合并为一次,性能还能再提升:

zip = a.zip(b, c)
count = Hash.new(0)
sum = 0
zip.each do |e|
  count[e] += 1
  sum += 1 if count[e] > 1
end
return sum

内容的提问来源于stack exchange,提问作者Tarta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 15:15:03