如何从哈希中获取数据?

鉴于此哈希值:params

"positions"=>{ "1"=>{"x"=>"50", "y"=>"30"}, "2"=>{"x"=>"22", "y"=>"53"}, "3"=>{"x"=>"68", "y"=>"35"} } 

我该怎么办? (不起作用,但试图表明我想做什么)

 params[:positions].each do |position| logger.info(position.x) end 

我知道,痛苦的初学者的东西……

我得到一个NoMethodError (undefined method 'x' for ["1", {"x"=>"50", "y"=>"30"}]:Array)

我想你想要的是什么

 params[:positions].each do |index, coords| logger.info(coords['x']) end 

如果你不关心索引,你也可以使用params[:positions].values.each do |coords| 代替。

你可以这样做:

 positions = { "1"=>{"x"=>"50", "y"=>"30"}, "2"=>{"x"=>"22", "y"=>"53"}, "3"=>{"x"=>"68", "y"=>"35"} } positions.each_value do |hash| logger.info(hash['x']) end 

each_value方法将拉出哈希值(例如{"x"=>"50", "y"=>"30"} )。 在这些哈希中,您的键是字符串,因此您需要使用弦键查看这些哈希值。

我认为你正在寻找位置[x]而不是position.x。

如果你使用带有哈希的Enumerable#each,你需要捕获两个块变量(这会将键/值数组“展开”为两个不同的变量)。 此外,Ruby不使用点语法进行哈希(这不是Javascript)。

  some_hash.each do | (key, value) puts value["x"] end 

这样可以避免首先组装一个值数组(使用Hash#values)。