2010-08-16 163 views
7
{"Journal"=>[[4, -785.0], 
      [13, -21.9165000915527], 
      [14, -213.008995056152], 
      [15, -50.074499130249]]} 

如何在Ruby中迭代此散列,以及如何分隔出鍵值&值?迭代哈希集合

+0

如果需要通過一個HashMap迭代,你是也許使用錯誤的容器 – Scoregraphic 2010-08-16 13:32:34

+0

@分數圖 - 不一定 - 這並不罕見。例如:序列化數據。 – 2010-08-16 13:36:09

+0

等待,你有一個單一的鍵/值對的散列,其值是一個數組數組? – haffax 2010-08-16 13:39:38

回答

14
myHash.each do |key, value| 
    // key holds the key, value holds the value 
end 

如果要變換的陣列的陣列內的地圖做到這一點:

myNewHash = {} 
myArrayOfArrays = myHash["Journal"] 
myArrayOfArrays.each do | item | 
    myNewHash[item[0]] = item[1] 
end 
21

Ruby有一個統一的迭代接口。 Ruby中的所有集合都有一個名爲each的方法,它允許您遍歷集合中的每個元素。但是請注意,顯式迭代是一種代碼異味。您應該主要使用更高級別的迭代器,如map,reduce,select,find,reject等。

在其中集合是一個Hash,正被產生到您的塊中的每個元件此特定情況下,是由鍵和值的二單元陣列:

print hsh.reduce('') {|s, el| 
    s << "The key is #{el.first} and the value is #{el.last}.\n" 
} 

由於Ruby的解構綁定,你可以簡單地在陣列的兩個元素綁定到你的格擋兩個變量,你會不會需要不斷的拆開陣列:

print hsh.reduce('') {|s, (k, v)| 
    s << "The key is #{k} and the value is #{v}.\n" 
}