Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列表中现有哈希的新哈希-Ruby_Ruby_Hash - Fatal编程技术网

列表中现有哈希的新哈希-Ruby

列表中现有哈希的新哈希-Ruby,ruby,hash,Ruby,Hash,我有一个列表,其中包含类似以下内容的哈希: list = [{"created_at"=>"2016-11-07T18:49:51.000Z", "updated_at"=>"2016-11-07T18:49:51.000Z", "id"=>1, "name"=>"Test1", "title"=>"Test1", "description"=>""},

我有一个列表,其中包含类似以下内容的哈希:

list = [{"created_at"=>"2016-11-07T18:49:51.000Z",
         "updated_at"=>"2016-11-07T18:49:51.000Z",
         "id"=>1,
         "name"=>"Test1",
         "title"=>"Test1",
         "description"=>""},
        {"created_at"=>"2017-05-24T13:34:13.000Z",
         "updated_at"=>"2017-05-24T13:34:13.000Z",
         "id"=>23,
         "name"=>"Test2",
         "title"=>"Test2",
         "description"=>nil}]
我希望能够迭代这个散列列表,并创建一个新的散列,该散列只将id的值作为键,将name的值作为键的值。目前我的解决方案是:

def new_hash(list)
  @new_hash = Hash.new
  list.each do | x |
    @new_hash[x["id"]] = x["name"]
  end
end
这将生成如下所示的哈希:

{1=>“Test1”,23=>“Test2”}

我的问题是,在Ruby中有没有更优雅的方法来处理这个问题?

试试这个

Hash[list.map { |h| h.values_at('id', 'name') }]
 => {1=>"Test1", 23=>"Test2"}
试试这个

Hash[list.map { |h| h.values_at('id', 'name') }]
 => {1=>"Test1", 23=>"Test2"}
另一种选择:

list.map {|hash| [hash["id"], hash["name"]]}.to_h
#=> {1=>"Test1", 23=>"Test2"}
另一种选择:

list.map {|hash| [hash["id"], hash["name"]]}.to_h
#=> {1=>"Test1", 23=>"Test2"}

美好的我不知道你可以这样叫哈什。那读起来好多了。谢谢你的回答,很好。我不知道你可以这样叫哈什。那读起来好多了。谢谢你的回答。