繁体   English   中英

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

[英]Convert hash of hash in array of 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
   }
]

您可以使用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"}]

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

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

@array = []

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

这非常适合Enumerable#each_with_object

output = input.each_with_object([]) do |(person_id, values), array|
  array << values.merge("person_id" => person_id)
end

该方法为初始状态(此处为数组)获取一个任意对象,并使用一个块对集合(我们的哈希)进行迭代。 初始对象是yield作为该块的第二个参数。 在每次迭代中,我们都会根据需要填充数组。 在该块的末尾,在我的示例中的output变量中返回了该对象。

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

可枚举的#each_with_object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM