Преобразование хэшей Ruby в массивы - PullRequest
8 голосов
/ 04 января 2011

у меня есть хэш, который имеет вид {:a => {"aa" => 11,"ab" => 12}, :b => {"ba" => 21,"bb" => 22}}

Как мне преобразовать его в форму {:a => [["aa",11],["ab",12]],:b=>[["ba",21],["bb",22]]}

Ответы [ 3 ]

17 голосов
/ 04 января 2011

Если вы хотите изменить исходный хеш, вы можете сделать:

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

Из документации для Hash # to_a

Преобразует hsh в aвложенный массив массивов [ключ, значение].

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

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

2 голосов
/ 22 октября 2013

Вот еще один способ сделать это:

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]]}
0 голосов
/ 04 января 2011
hash.collect {|a, b|  [a, hash[a].collect {|c,d| [c,d]}] }.collect {|e,f| [e => f]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...