将Ruby哈希转换为数组

时间:2011-01-04 08:59:51

标签: ruby-on-rails ruby

我有一个形式的哈希 {:a => {"aa" => 11,"ab" => 12}, :b => {"ba" => 21,"bb" => 22}}

如何将其转换为{:a => [["aa",11],["ab",12]],:b=>[["ba",21],["bb",22]]}

形式

3 个答案:

答案 0 :(得分:17)

如果你想修改原始哈希,你可以这样做:

hash.each_pair { |key, value| hash[key] = value.to_a }

来自Hash#to_a

的文档
  

将hsh转换为[嵌套数组]   key,value]数组。

     

h = { "c" => 300, "a" => 100, "d" => 400, "c" => 300 }

     

h.to_a #=> [["c", 300], ["a", 100], ["d", 400]]

答案 1 :(得分:2)

这是另一种方法:

hsh = {:a => {"aa" => 11,"ab" => 12}, :b => {"ba" => 21,"bb" => 22}}
hsh.each{|k,v| hsh[k]=*v}
# => {:a=>[["aa", 11], ["ab", 12]], :b=>[["ba", 21], ["bb", 22]]}

答案 2 :(得分:0)

hash.collect {|a, b|  [a, hash[a].collect {|c,d| [c,d]}] }.collect {|e,f| [e => f]}