Arrays 在Ruby中将哈希数组映射到键控哈希

Arrays 在Ruby中将哈希数组映射到键控哈希,arrays,ruby,hash,Arrays,Ruby,Hash,我有一个哈希数组,如下所示: array= [ { "id"=> 101, "first_name"=> "xxx", "last_name"=> "G", "email"=> "xxx@yyyy.com", "phone_number"=> "555-555-5555" }, { "id"=> 102, "

我有一个哈希数组,如下所示:

   array= [
      {
        "id"=> 101,
        "first_name"=> "xxx",
        "last_name"=> "G",
        "email"=> "xxx@yyyy.com",
        "phone_number"=> "555-555-5555"
      },
      {
        "id"=> 102,
        "first_name"=> "Jen",
        "last_name"=> "P",
        "email"=> "jen.p@example.com",
        "phone_number"=> "555-555-5555"
      }
    ]
   array = {
          "101"=> 
          {
            "first_name"=> "xxx",
            "last_name"=> "G",
            "email"=> "xxx@yyyy.com",
            "phone_number"=> "555-555-5555"
          },
          "102"=>
          {
            "first_name"=> "Jen",
            "last_name"=> "P",
            "email"=> "jen.p@example.com",
            "phone_number"=> "555-555-5555"
          }
       }
我想将其转换为如下所示的哈希:

   array= [
      {
        "id"=> 101,
        "first_name"=> "xxx",
        "last_name"=> "G",
        "email"=> "xxx@yyyy.com",
        "phone_number"=> "555-555-5555"
      },
      {
        "id"=> 102,
        "first_name"=> "Jen",
        "last_name"=> "P",
        "email"=> "jen.p@example.com",
        "phone_number"=> "555-555-5555"
      }
    ]
   array = {
          "101"=> 
          {
            "first_name"=> "xxx",
            "last_name"=> "G",
            "email"=> "xxx@yyyy.com",
            "phone_number"=> "555-555-5555"
          },
          "102"=>
          {
            "first_name"=> "Jen",
            "last_name"=> "P",
            "email"=> "jen.p@example.com",
            "phone_number"=> "555-555-5555"
          }
       }
我尝试过这个方法,但不起作用:

    array.each do |a|
      a.map{|x| x[:id]}
    end
我怎么用Ruby做这个?我正在查看map函数,但不确定在这种情况下如何实现它。请帮忙

这项工作(说明性):

本工程(说明性):

试试这个:

array_h = Hash.new
array.each{|a| array_h[a["id"]] = a.reject{|e| e=='id' }}

#Output of array_h:
{
  101=>
    {
      "first_name"=>"xxx", 
      "last_name"=>"G", 
      "email"=>"xxx@yyyy.com", 
      "phone_number"=>"555-555-5555"
    }, 
  102=>
    {
      "first_name"=>"Jen", 
      "last_name"=>"P", 
      "email"=>"jen.p@example.com", 
      "phone_number"=>"555-555-5555"
    }
}
注意:这不会修改原始阵列。

请尝试以下操作:

array_h = Hash.new
array.each{|a| array_h[a["id"]] = a.reject{|e| e=='id' }}

#Output of array_h:
{
  101=>
    {
      "first_name"=>"xxx", 
      "last_name"=>"G", 
      "email"=>"xxx@yyyy.com", 
      "phone_number"=>"555-555-5555"
    }, 
  102=>
    {
      "first_name"=>"Jen", 
      "last_name"=>"P", 
      "email"=>"jen.p@example.com", 
      "phone_number"=>"555-555-5555"
    }
}
注意:这不会修改原始阵列。

非破坏性变体(保留
阵列
),同时删除
“id”

非破坏性变体(保留
阵列
),同时删除
“id”


@请看我的编辑,你的散列数组语法错误,它不是Ruby散列,看起来像javascript
json
@谢谢你的指点。我正在使用json库将其转换为ruby哈希。但我的问题仍然是请看编辑这与
数组中的
groupu by
的输出非常相似。groupu by{a | a[:id]}
请看我的编辑总是这样,你的哈希数组语法错误,不是Ruby哈希,它看起来像javascript
json
@好的,谢谢你的指点。我正在使用json库将其转换为ruby哈希。但我的问题仍然是请看编辑这与
数组中的
groupby
的输出非常相似。groupu by{a | a[:id]}
。这实际上并没有返回OP所要求的内容。它返回另一个散列数组,并将每个原始散列包装成另一个散列。其他用户提供了正确的解决方案。自从Ruby 2.1以来,还可以使用
x.to_h
而不是
Hash[x]
。主要是审美上的差异。这并没有真正回应OP的要求。它返回另一个散列数组,并将每个原始散列包装成另一个散列。其他用户提供了正确的解决方案。自从Ruby 2.1以来,还可以使用
x.to_h
而不是
Hash[x]
。主要是审美差异。