我有一个密钥为cities
的哈希值,该值是包含位置数据的哈希数组。它看起来像这样:
@locations = {
"cities"=>[
{"longitude"=>-77.2497049, "latitude"=>38.6581722, "country"=>"United States", "city"=>"Woodbridge, VA"},
{"longitude"=>-122.697236, "latitude"=>58.8050174, "country"=>"Canada", "city"=>"Fort Nelson, BC"},
...
]
}
我想迭代并打印密钥city
的所有值:
Woodbridge, VA
Fort Nelson, BC
...
答案 0 :(得分:1)
我不能说你为什么会有这种结构,无论如何,你在上面的数据格式中,你会像
那样访问它@locations[1].each { |c| p c["city"] }
尽管如此,这意味着您应该始终期望数组中的第二个对象是必需的cities数组。此外,您需要进行必要的零检查。
答案 1 :(得分:0)
正如其他人所说,你必须做同样的事情,但让我解释那里发生的事情。
您的示例是一个数组,并且有多个元素,可以只是像cities
这样的字符串,也可以是您提到的哈希数组。
因此,为了遍历哈希并打印城市值,首先必须访问具有哈希值的数组。通过这样做
@locations["cities"]
=> [{"longitude"=>-77.2497049, "latitude"=>38.6581722, "country"=>"United States", "city"=>"Woodbridge, VA"}, {"longitude"=>-122.697236, "latitude"=>58.8050174, "country"=>"Canada", "city"=>"Fort Nelson, BC"}]
现在您已经使用了所需的阵列,您可以通过它们进行整合并获得如此打印的结果
@locations["cities"].map{|hash| p hash['city']}
如果你在评论中说明了你的nil错误,那么只要看看当你尝试访问哈希数组时会发生什么。如果您仍然遇到问题,那么您可能必须提供完整的输入,以便了解问题所在。
答案 2 :(得分:0)
对于更正后的数据格式:
@locations = { "cities"=>[
{ "longitude"=>-77.2497049,
"latitude"=>38.6581722,
"country"=>"United States",
"city"=>"Woodbridge, VA"},
{ "longitude"=>-122.697236,
"latitude"=>58.8050174,
"country"=>"Canada",
"city"=>"Fort Nelson, BC" }] }
@locations["cities"].each { |h| puts h["city"] }
Woodbridge, VA
Fort Nelson, BC
或保存在数组中:
@locations["cities"].each_with_object([]) { |h,a| a << h["city"] }
#=> ["Woodbridge, VA", "Fort Nelson, BC"]