如何在Ruby中根据key的前缀对哈希内容进行分组合并?
实现方案
下面给出两种简洁易读的Ruby实现,都可以达到目标效果:
方案1:单次遍历实现(效率最优)
仅遍历一次原哈希即可完成转换,适合数据量较大的场景:
# 假设原哈希存储在变量 original_hash 中 result = original_hash.each_with_object(Hash.new { |hash, key| hash[key] = [] }) do |(key, value), res| # 拆分key取前缀 prefix = key.to_s.split('_').first # 合并当前值数组到对应前缀的结果数组中 res[prefix].concat(value) end
方案2:函数式写法(语义更清晰)
基于Ruby标准库的分组方法实现,代码更简洁易读:
result = original_hash.group_by { |key, _| key.to_s.split('_').first } .transform_values { |groups| groups.flat_map(&:last) }
两种写法输出的结果完全符合你需要的结构。如果前缀的拆分规则有变化(比如key包含多个下划线要取前N段),只需要修改split('_').first对应的逻辑即可。
内容的提问来源于stack exchange,提问作者Victor Motogna
相关产品推荐
相关产品推荐

