迭代哈希集合

Rav*_*kar 7 ruby mapping hash

{"Journal"=>[[4, -785.0], 
             [13, -21.9165000915527], 
             [14, -213.008995056152], 
             [15, -50.074499130249]]}
Run Code Online (Sandbox Code Playgroud)

你如何在Ruby中迭代这个哈希,你将如何分离键和值?

Jör*_*tag 21

Ruby有一个统一的迭代接口.Ruby中的所有集合都有一个名为的方法each,它允许您遍历集合的每个元素.但请注意,显式迭代是代码气味.你应该多采用更高级别的迭代器一样map,reduce,select,find,reject和这样的.

在这个集合是a的特殊情况下Hash,每个元素都被生成块,是一个由元素和值组成的双元素数组:

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

感谢Ruby的解构绑定,你可以简单地将数组的两个元素绑定到块中的两个变量,而不需要经常将数组分开:

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


haf*_*fax 14

myHash.each do |key, value|
  // key holds the key, value holds the value
end
Run Code Online (Sandbox Code Playgroud)

如果想要将数组中的数组转换为map,请执行以下操作:

myNewHash = {}
myArrayOfArrays = myHash["Journal"]
myArrayOfArrays.each do | item |
  myNewHash[item[0]] = item[1]
end
Run Code Online (Sandbox Code Playgroud)