如何转换以下内容
@results = [{"id"=>"one", "url"=>"/new/file_one.jpg"},
{"id"=>"two", "url"=>"/new/file_two.jpg"}]
到
@results = {"one" => "/new/file_one.jpg",
"two" => "/new/file_two.jpg"}
我应该使用“地图”还是“收集”?从..开始
@results.map{ |x| x['id']}
答案 0 :(得分:3)
使用Hash::[]
:
@results = [{"id"=>"one", "url"=>"/new/file_one.jpg"},
{"id"=>"two", "url"=>"/new/file_two.jpg"}]
Hash[@results.map { |x| [x['id'], x['url']] }]
# => {"one"=>"/new/file_one.jpg", "two"=>"/new/file_two.jpg"}
在Ruby 2.1+中,您还可以使用Enumerable#to_h
:
@results.map { |x| [x['id'], x['url']] }.to_h
# => {"one"=>"/new/file_one.jpg", "two"=>"/new/file_two.jpg"}
答案 1 :(得分:2)
迭代数组并提取每个子哈希的值:
[
{"id"=>"one", "url"=>"/new/file_one.jpg"},
{"id"=>"two", "url"=>"/new/file_two.jpg"}
].map(&:values).to_h
# => {"one"=>"/new/file_one.jpg", "two"=>"/new/file_two.jpg"}
如果您的Ruby不支持to_h
,请将其全部包装在Hash[...]
中。
答案 2 :(得分:1)
这是你在找什么?
results.map{ |x| {x['id'] => x['url']} }