如何从哈希中获取数据?
鉴于此哈希值: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)。