与数组的转换

哈希可以自由地转换为数组和从数组中转换。将键/值对的散列转换为数组将生成包含用于对的嵌套数组的数组:

{ :a => 1, :b => 2 }.to_a # => [[:a, 1], [:b, 2]]

在相反的方向,可以从相同格式的数组创建哈希:

[[:x, 3], [:y, 4]].to_h # => { :x => 3, :y => 4 }

类似地,可以使用 Hash[] 和交替键和值列表初始化 Hashes:

Hash[:a, 1, :b, 2] # => { :a => 1, :b => 2 }

或者来自一组数组,每个数组都有两个值:

Hash[ [[:x, 3], [:y, 4]] ] # => { :x => 3, :y => 4 }

可以使用 flatten() 将哈希值转换回交替键和值的数组:

{ :a => 1, :b => 2 }.flatten # => [:a, 1, :b, 2]

通过数组的简单转换,Hash 可以很好地处理 Enumerablezip 等许多方法:

Hash[('a'..'z').collect{ |c| [c, c.upcase] }] # => { 'a' => 'A', 'b' => 'B', ... }

people = ['Alice', 'Bob', 'Eve']
height = [5.7, 6.0, 4.9]
Hash[people.zip(height)] # => { 'Alice' => 5.7, 'Bob' => '6.0', 'Eve' => 4.9 }