在哈希数组中转换哈希哈希

时间:2019-06-23 19:41:54

标签: ruby-on-rails arrays hash

我需要修改哈希的哈希并将其转换为数组的哈希。

我还需要添加一个新的键值。

这是我当前的哈希值:

{ "132552" => {
           "name" => "Paul",
           "id" => 53
         },
"22478" => {
          "name" => "Peter",
           "id" => 55
        }
}

我希望输出如下:

[
  {
      "person_id": "132552",
      "name" => "Paul",
      "id" => 53
   },
   {
      "person_id": "22478",
      "name" => "Peter",
      "id" => 55
   }
]

3 个答案:

答案 0 :(得分:2)

您可以使用Enumerable#map映射到合并(Hash#merge)新对的哈希值:

original_hash.map { |k,v| v.merge({ "person_id" => k }) }
#=> [{"name"=>"Paul", "id"=>53, "person_id"=>"132552"}, {"name"=>"Peter", "id"=>55, "person_id"=>"22478"}]

答案 1 :(得分:0)

可能不是最好的解决方案,但是以下方法应该起作用(考虑h是您的哈希):

@h.each do |key,value|
  value["person_id"] = key
end

@array = []

@h.each do |key, value|
  @array << value
end

答案 2 :(得分:0)

这非常适合'com.android.support.constraint:constraint-layout:2.0.0-beta1'

Enumerable#each_with_object

此方法为初始状态(此处为数组)获取一个任意对象,并使用一个块迭代该集合(我们的哈希)。初始对象是yield作为该块的第二个参数。在每次迭代中,我们都会根据需要填充数组。在本例的最后,在output = input.each_with_object([]) do |(person_id, values), array| array << values.merge("person_id" => person_id) end 变量中返回该对象。

请注意,在我的示例中,我将哈希分解为output:哈希的每个条目都可以作为(person_id, values)分解为块/方法参数。

Enumerable#each_with_object