3

我正在寻找一种查询数据库的惯用方式,并将所有值按列分组。

例如,指令:

@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]
}

所有数组的第一个元素用“white”键存储,所有数组的第二个元素用“black”键存储,依此类推。

4

1 回答 1

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]}
于 2013-09-12T13:57:53.263 回答