考虑到这个哈希: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)
答案 0 :(得分:13)
我认为你想要的是
params[:positions].each do |index, coords|
logger.info(coords['x'])
end
如果您不关心索引,也可以使用params[:positions].values.each do |coords|
代替。
答案 1 :(得分:3)
你可以这样做:
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"}
)。在这些哈希中,您的键是字符串,因此您需要使用弦键查看这些哈希值。
答案 2 :(得分:1)
我认为你正在寻找位置[x]而不是position.x。
答案 3 :(得分:0)
如果你使用带有哈希的Enumerable#each,你需要捕获两个块变量(这将键/值数组“展开”为两个不同的变量)。此外,Ruby不使用点语法进行哈希(这不是Javascript)。
some_hash.each do | (key, value)
puts value["x"]
end
这样可以避免首先组装一个值数组(使用Hash#values)。