如何为每个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
相关产品推荐
相关产品推荐

