Заполнение массивов и превращение хешей в массивы - PullRequest
2 голосов
/ 18 июля 2011

Если у меня есть хэш {:one => [1,2,3,4], :two => [6,7,8]}, как я могу просто создать массив, где Array [0] = [1,6], [1] = [2,7], [2] = [3,8],[3] = [4, ноль] ``?

1 Ответ

3 голосов
/ 18 июля 2011

С zip :

h = {:one => [1,2,3,4], :two => [6,7,8]}
h[:one].zip h[:two] # => [[1, 6], [2, 7], [3, 8], [4, nil]]

Для любого количества ключей:

h = {:one => [1,2,3,4], :two => [6,7,8], :three => [9,10]}
vals = h.values # => [[1, 2, 3, 4], [6, 7, 8], [9, 10]]
vals[0].zip *vals[1..-1] # => [[1, 6, 9], [2, 7, 10], [3, 8, nil], [4, nil, nil]]

Однако я не верю, что их порядок гарантирован (потому чтохеши неупорядочены).Возможно, вы захотите рассмотреть другой подход.(Как указывает Дэвид в комментариях, хэши на самом деле упорядочены в Ruby 1.9, так что это не проблема.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...