填充数组并将哈希值转换为数组

时间:2011-07-18 00:14:29

标签: ruby arrays hash

如果我有一个哈希值{:one => [1,2,3,4], :two => [6,7,8]},我怎么能只做一个Array [0] = [1,6],[1] = [2,7],[2] = [3,8]的数组],[3] = [4,无]``?

1 个答案:

答案 0 :(得分:3)

使用 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]]

但是我不相信这些的顺序是有保证的(因为哈希是无序的)。您可能想要考虑不同的方法。 (正如David在评论中指出的,Hashes实际上是在Ruby 1.9中订购的,所以这不是一个问题。)