Ruby 中如何筛选哈希内数值大于指定值的键值对
实现逻辑说明
Ruby 的哈希本身内置了来自 Enumerable 模块的筛选方法,不需要手动写循环逐一遍历比对,直接调用对应方法就能完成需求。
针对当前31天月份的筛选实现
用最贴合筛选场景的 Hash#select 方法即可,该方法会遍历所有键值对,把满足条件的条目收集成新哈希返回,不会改动原有的哈希数据:
months = { "MAR" => 31, 'APR' => 30, 'MAY' => 31, 'JUN' => 30 } # 逐一遍历判断值是否大于30,收集满足条件的条目 target_months = months.select { |month, days| days > 30 } # 打印结果 puts target_months
运行代码后会输出:
{"MAR"=>31, "MAY"=>31}
完全匹配需要筛选所有31天月份的要求。
通用的“查找值大于任意指定值”的实现
如果要适配任意阈值的查找需求,只需要把比对的数值抽成独立参数,把筛选逻辑封装成可复用的方法即可,后续要查大于多少的值都不用修改核心筛选代码:
# 通用筛选方法:传入待查哈希、对比阈值,返回所有值大于阈值的条目 def filter_values_larger_than(source_hash, threshold) source_hash.select { |key, value| value > threshold } end # 示例调用:查大于30的条目 puts filter_values_larger_than(months, 30) # 示例调用:查大于29的条目 puts filter_values_larger_than(months, 29)
新手易混淆的方法差异
select:返回符合条件的新哈希,不修改原数据,适合常规筛选场景keep_if:会直接删除原哈希中不满足条件的条目,属于破坏性修改,使用时要确认是否真的需要改动原数据
内容的提问来源于stack exchange,提问作者Silka
相关产品推荐
相关产品推荐

