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

时间:2017-05-25 14:51:01

标签: 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"=>""},
        {"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 个答案:

答案 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"}
相关问题