與陣列的轉換
雜湊可以自由地轉換為陣列和從陣列中轉換。將鍵/值對的雜湊轉換為陣列將生成包含用於對的巢狀陣列的陣列:
{ :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
可以很好地處理 Enumerable
和 zip
等許多方法:
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 }