如何在Ruby中合并同名称哈希数组并对数量字段求和
Ruby 合并同名称哈希数组并对数量求和
给定如下Ruby哈希数组:
items = [{name: 'item_1', qty: 1, unit_price: 5}, {name: 'item_1', qty: 2, unit_price: 5}, {name: 'item_2', qty: 3, unit_price: 10}, {name: 'item_2', qty: 2, unit_price: 10}]
需要将具有相同name的哈希合并为一个,同时对qty字段求和,预期输出如下:
[{name: 'item_1', qty: 3, unit_price: 5}, {name: 'item_2', qty: 5, unit_price: 10}]
解决方案
可以通过group_by结合map实现需求:
items.group_by { |item| item[:name] }.map do |name, group| { name: name, qty: group.sum { |item| item[:qty] }, unit_price: group.first[:unit_price] } end
说明
- 使用
group_by { |item| item[:name] }将原数组按name分组,得到以name为键、对应哈希数组为值的新哈希。 - 遍历分组后的哈希,对每个分组:
- 保留
name字段; - 通过
group.sum { |item| item[:qty] }计算该分组的总数量; - 取分组中第一个元素的
unit_price(假设同名称的哈希unit_price一致,符合示例场景)。
- 保留
内容的提问来源于stack exchange,提问作者jkvithanage
相关产品推荐
相关产品推荐

