2010-08-16 106 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" 
}