Ruby实现:嵌套JSON按产品名去重并筛选最低rate
Ruby处理产品最低费率问题解决方案
实现步骤
- 扁平化所有section下的产品数据,同时绑定所属section信息
- 按产品名称分组
- 每组内筛选出费率最低的条目
- 整理成目标格式数组
示例代码
假设你的JSON解析后得到的哈希是json_data:
# 若原始是JSON字符串,先解析为Ruby哈希 # json_data = JSON.parse(your_json_string) # 扁平化所有产品,携带所属section信息 all_products = json_data['data'].flat_map do |section| section['products'].map do |product| { name: product['product'], rate: product['rate'].to_f, # 转成数值避免字符串排序错误 section: section # 按需可改为section的特定字段,如section['name'] } end end # 按产品名分组,取每组中费率最低的条目 result = all_products.group_by { |p| p[:name] }.map do |name, items| min_item = items.min_by { |item| item[:rate] } # 按需求整理输出格式 { product_name: name, lowest_rate: min_item[:rate], related_section: min_item[:section] } end # 查看结果 pp result
关键说明
flat_map用于拆解嵌套的products数组,同时给每个产品绑定所属sectiongroup_by确保同一产品的所有条目归为一组min_by直接根据rate数值筛选最低费率条目,代码简洁高效- 若rate字段是字符串类型,必须先转成数值(
to_f或to_i)再比较,否则会出现字符串排序逻辑错误
内容的提问来源于stack exchange,提问作者Rubioli
相关产品推荐
相关产品推荐

