Ruby数组链式调用时无需存储排序数组获取所有最大值元素的方法
不中断链式调用的实现方案
以下三种方案均无需额外声明变量存储中间结果,全程保持链式调用逻辑:
- 性能最优实现(O(n)时间复杂度,仅遍历2次数组,适合大数据量场景)
[1, 3, 2, 3, 2, 3].then do |arr| max_val = arr.max arr.select { _1 == max_val } end #=> [3, 3, 3]
Ruby 3.4+ 支持变量绑定写法可以进一步简化代码:
[1, 3, 2, 3, 2, 3].then { _1.max => max_val; _1.select { _1 == max_val } }
- 排序场景适配实现(如果业务逻辑本身已经需要排序,可复用排序结果不中断链路)
[1, 3, 2, 3, 2, 3].sort { _2 - _1 }.then { _1.take_while { _1 == _.first } } #=> [3, 3, 3]
- 最简洁实现(小数据量场景下代码最紧凑易读)
[1, 3, 2, 3, 2, 3].group_by(&:itself).max.last #=> [3, 3, 3]
内容的提问来源于stack exchange,提问作者Fravadona
相关产品推荐
相关产品推荐

