2013-09-12 4 views
3

Я ищу идиоматический способ запроса базы данных и иметь все значения, сгруппированные по столбцу.Ruby/Rails: Преобразование массива массивов в хэш массивов

Например, команда:

@players = Player.pluck(:white, :black, :red, :blue, :yellow) 

Возвращает многомерный массив так:

[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]] 

, но мне нужно хэш массивов, как это:

{ 
    white: [1, 6, 11], 
    black: [2, 7, 12], 
    red: [3, 8, 13], 
    blue: [4, 9, 14], 
    yellow: [5, 10, 15] 
} 

Если первый элемент всех массивов хранится с помощью «белого» ключа, вторым элементом всех массивов является ed с «черным» ключом и так далее.

ответ

8
a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]] 
[:white, :black, :red, :blue, :yellow].zip(a.transpose) 
# => [[:white, [1, 6, 11]], [:black, [2, 7, 12]], [:red, [3, 8, 13]], [:blue, [4, 9, 14]], [:yellow, [5, 10, 15]]] 
Hash[[:white, :black, :red, :blue, :yellow].zip(a.transpose)] 
# => {:white=>[1, 6, 11], :black=>[2, 7, 12], :red=>[3, 8, 13], :blue=>[4, 9, 14], :yellow=>[5, 10, 15]} 
Смежные вопросы