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

如何为每个Hash键映射对应最新年份的多元素值条目

解决方案:用max_by指定年份作为筛选依据

这个问题很容易解决,只需要调整一下数组最大值的筛选逻辑,明确以**年份(子数组的第二个元素)**作为比较基准就可以了,直接看代码:

new_hash = { 
  "123456"=>[["123456", "1975", "ST"], ["123456", "2009", "PE"]], 
  "123999"=>[["123999", "1928", "ST"], ["123999", "2012", "PE"]] 
}

# 核心逻辑:用max_by指定按年份筛选最新条目
result = new_hash.map { |key, entries| entries.max_by { |entry| entry[1] } }

# 输出结果正好符合你的需求
# => [["123456", "2009", "PE"], ["123999", "2012", "PE"]]

为什么这个方法可行?

  • 你之前用的max方法,默认会按数组的元素顺序依次对比(先比第一个元素,再第二个,最后第三个),如果两个条目年份相同但第三个元素不同,可能会出现不符合预期的结果;
  • 而max_by { |entry| entry[1] }会直接聚焦到子数组的第二个元素(年份)进行比较,返回年份最大的完整条目,自然就保留了第三个状态标识元素。

额外补充

如果你的年份格式不统一(比如存在两位数字的年份),可以把年份转成整数再比较,避免字符串对比的误差:

entries.max_by { |entry| entry[1].to_i }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:47:52