列表中现有哈希的新哈希-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"}
美好的我不知道你可以这样叫哈什。那读起来好多了。谢谢你的回答,很好。我不知道你可以这样叫哈什。那读起来好多了。谢谢你的回答。