我有一个包含与此类似的哈希的列表:
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的值作为键,名称的值作为键的值。目前我的解决方案是:
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中解决这个问题?
答案 0 :(得分:3)
试试这个
Hash[list.map { |h| h.values_at('id', 'name') }]
=> {1=>"Test1", 23=>"Test2"}
答案 1 :(得分:2)
list.each_with_object({}) { |g,h| h[g["id"]] = g["name"] }
答案 2 :(得分:1)
另一种选择:
list.map {|hash| [hash["id"], hash["name"]]}.to_h
#=> {1=>"Test1", 23=>"Test2"}