ruby - 合并数组内具有相同键值对的哈希
问题描述
如何在具有相同键、值对的数组中合并哈希?我有以下数组,
arry = [{"id" => 1, "val1" => 123},
{"id" => 2, "val1" => 234},
{"id" => 1, "val2" => 321},
{"id" => 1, "val3" => 445},
{"id" => 3, "val3" => 334}]
想要得到
arry = [{"id" => 1, "val1" => 123, "val2" => 321, "val3" => 445},
{"id" => 2, "val1" => 234},
{"id" => 3, "val3" => 334}]
有红宝石方法吗?尝试了几种方法,但到目前为止没有成功。
解决方案
您发布的arry
首先不是有效的 ruby 数组(我在编辑中修复了它。)
arry.
group_by { |h| h["id"] }.
values.
map { |a| a.reduce(&:merge) }
#⇒ [{"id"=>1, "val1"=>123, "val2"=>321, "val3"=>445},
# {"id"=>2, "val1"=>234}, {"id"=>3, "val3"=>334}]
如果您的输入可能具有相同的键"id"
(如{"id" => 1, "val1" => 123}, {"id" => 1, "val1" => 456}
,),您将决定如何合并它们。无论如何,Hash#merge
有一个街区将是你的朋友。
推荐阅读
- gams-math - 如何加快 GAMS 中的模型生成过程
- vue.js - 仅在按下键时处理 VueJS 事件
- bert-language-model - 无法在 python 中导入 simpletransformers.ner,因为它说 ImportError: cannot import name 'BertweetTokenizer'
- laravel - 如何在子域 hostgator 上部署我的 laravel 项目
- excel - 根据条件为单元格分配不同的公式
- javascript - 如何在`useEffect`中查看类对象值
- ruby - Minitest/Capybara 下拉菜单定位器问题
- google-apps-script - Google Script 作为 webhook 接收器
- python-3.x - 如何重新采样正在使用 wavfile.read 读取的 .wav 声音文件?
- c++ - 如何加快此程序以找到斐波那契数列