2014-01-25 9 views
0

我有阵列的一个这样的数组:红宝石如何使新的密钥的哈希值,和值从一个数组

arr = [["food", "eggs"],["beverage", "milk"],["desert", "cake"]] 

,我需要把它变成散列的数组,其中键是定制和新的键值是阵列中的值,如下所示:

hash = [{"category": "food", "item":"eggs"}, 
      {"category": "beverage", "item":"milk"} 
      {"category": "desert", "item":"cake"}] 

我该怎么做? 谢谢

回答

3

使用Array#map

arr = [["food", "eggs"], ["beverage", "milk"], ["desert", "cake"]] 

arr.map { |category, item| { category: category, item: item } } 
# => [ 
#  {:category=>"food", :item=>"eggs"}, 
#  {:category=>"beverage", :item=>"milk"}, 
#  {:category=>"desert", :item=>"cake"} 
# ] 
+0

非常感谢你!那完美的工作 – rowyourboat

1
arr = [["food", "eggs"],["beverage", "milk"],["desert", "cake"]] 

arr.inject([]) do |hash, (v1, v2)| 
    hash << { category: v1, item: v2 } 
end 

我以前inject保持代码的简洁。

下次您可能想要显示您在问题中尝试过的内容时,只是为了证明您在询问代码之前实际尝试了某些操作。

+0

谢谢你们的输入,以及。这两种解决方案都很好并且感谢你提出这个问题的建议,下次我会牢记这一点 – rowyourboat

0
hash = arr.each_with_object({}){|elem, hsh|hsh[elem[0]] = elem[1]} 
0
hash = array.map {|ary| Hash[[:category, :item].zip ary ]}