首页 > 解决方案 > 合并数组内具有相同键值对的哈希

问题描述

如何在具有相同键、值对的数组中合并哈希?我有以下数组,

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}]

有红宝石方法吗?尝试了几种方法,但到目前为止没有成功。

标签: ruby

解决方案


您发布的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有一个街区将是你的朋友。


推荐阅读