简体   繁体   English

将Ruby哈希转换为数组

[英]Converting Ruby hashes to arrays

I have a Hash which is of the form {:a => {"aa" => 11,"ab" => 12}, :b => {"ba" => 21,"bb" => 22}} 我有一个Hash,形式为{:a => {"aa" => 11,"ab" => 12}, :b => {"ba" => 21,"bb" => 22}}

How do i convert it to the form {:a => [["aa",11],["ab",12]],:b=>[["ba",21],["bb",22]]} 如何将其转换为{:a => [["aa",11],["ab",12]],:b=>[["ba",21],["bb",22]]}

If you want to modify the original hash you can do: 如果要修改原始哈希,可以执行以下操作:

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

From the documentation for Hash#to_a Hash#to_a的文档中

Converts hsh to a nested array of [ key, value ] arrays. 将hsh转换为[key,value]数组的嵌套数组。

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

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

Here is another way to do this : 这是另一种方法:

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]]}
hash.collect {|a, b|  [a, hash[a].collect {|c,d| [c,d]}] }.collect {|e,f| [e => f]}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM