首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换散列数组中散列的散列

转换散列数组中散列的散列
EN

Stack Overflow用户
提问于 2019-06-24 03:41:54
回答 3查看 86关注 0票数 0

我需要修改散列的散列,并将其转换为数组的散列。

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

这是我当前的散列:

代码语言:javascript
复制
{ "132552" => {
           "name" => "Paul",
           "id" => 53
         },
"22478" => {
          "name" => "Peter",
           "id" => 55
        }
}

我希望输出是这样的:

代码语言:javascript
复制
[
  {
      "person_id": "132552",
      "name" => "Paul",
      "id" => 53
   },
   {
      "person_id": "22478",
      "name" => "Peter",
      "id" => 55
   }
]
EN

回答 3

Stack Overflow用户

发布于 2019-06-24 04:35:44

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

代码语言:javascript
复制
original_hash.map { |k,v| v.merge({ "person_id" => k }) }
#=> [{"name"=>"Paul", "id"=>53, "person_id"=>"132552"}, {"name"=>"Peter", "id"=>55, "person_id"=>"22478"}]
票数 2
EN

Stack Overflow用户

发布于 2019-06-24 04:25:00

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

代码语言:javascript
复制
@h.each do |key,value|
  value["person_id"] = key
end

@array = []

@h.each do |key, value|
  @array << value
end
票数 0
EN

Stack Overflow用户

发布于 2019-06-24 04:40:02

这非常适合Enumerable#each_with_object

代码语言:javascript
复制
output = input.each_with_object([]) do |(person_id, values), array|
  array << values.merge("person_id" => person_id)
end

这个方法接受一个任意对象作为我们的初始状态(这里是一个数组),用一个块来迭代这个集合(我们的散列)。初始对象将作为块的第二个参数生成。在每次迭代中,我们都会根据需要填充数组。在代码块的末尾,这个对象被返回,在我的例子中是在output变量中。

请注意,在我的示例中,我将散列分解为(person_id, values):散列的每个条目都可以作为块/方法参数的(key, values)进行析构。

Enumerable#each_with_object

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56727229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档