2017-05-25 38 views
0

我有一個包含哈希值的列表,看起來與此類似:新的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"=>""}, 
     {"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來處理這個更優雅的方式?

回答

3

試試這個

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

尼斯。我不知道你可以這樣稱呼哈希。這讀起來好多了。感謝你的回答。 – Wes

1

另一種選擇:

list.map {|hash| [hash["id"], hash["name"]]}.to_h 
#=> {1=>"Test1", 23=>"Test2"} 
2
list.each_with_object({}) { |g,h| h[g["id"]] = g["name"] }