将数组结果转换为ruby

时间:2014-11-10 23:38:07

标签: ruby arrays ruby-on-rails-4 hash

如何转换以下内容

 @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']}

3 个答案:

答案 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']} }