转换哈希数组中的数组数组

时间:2016-01-26 13:37:42

标签: ruby-on-rails arrays ruby hash

array = [
    [ 1, "name1" ],
    [ 2, "name2" ],
    [ 3, "name3" ],
    [ 4, "name4" ]
]

我想把它变成像这样的哈希数组:

array_hash = [{ "id" => 1, "name" => "name1" },  
              { "id" => 2, "name" => "name2" },  
              { "id" => 3, "name" => "name3" },  
              { "id" => 4, "name" => "name4" }]

3 个答案:

答案 0 :(得分:4)

array = [
    [ 1, "name1" ],
    [ 2, "name2" ],
    [ 3, "name3" ],
    [ 4, "name4" ]
]
array.map { |e| ['id', 'name'].zip(e).to_h }
#⇒ [
#    {"id"=>1, "name"=>"name1"},
#    {"id"=>2, "name"=>"name2"},
#    {"id"=>3, "name"=>"name3"},
#    {"id"=>4, "name"=>"name4"}
# ]

唯一有趣的是Enumerable#zip,即“合并”数组。

答案 1 :(得分:3)

我会用:

array.map { |id, name| { 'id' => id, 'name' => name } }
#=> [{"id"=>1, "name"=>"name1"},
#    {"id"=>2, "name"=>"name2"},
#    {"id"=>3, "name"=>"name3"},
#    {"id"=>4, "name"=>"name4"}]

答案 2 :(得分:0)

.to_h方法是Ruby 2.x的新方法。这是1.9.x或更低版本的任何人的替代方案。

array = [[ 1, "name1" ], [ 2, "name2" ], [ 3, "name3" ], [ 4, "name4" ]]

array.inject([]) { |a, r| a << { id: r[0], name: r[1] } }