我有以下结构:
"countries": [
{
"states" :[
{
"name" :"Texas",
"id": "a1"
},
{
"name" :"Nebraska",
"id": "a1"
}
]
},
{
"states" :[
{
"name" :"New York",
"id": "a1",
},
{
"name" :"Florida",
"id": "a1"
}
]
}
]
我想从上面返回所有状态的数组。 这是我试过的:
countries.map { |country| country.states.map { |state| state.name } }
但它只返回前两个州“德州”和内布拉斯加州。
有人可以告诉我这里做错了吗?
答案 0 :(得分:0)
你的结构不对,所以更正了:
countries = [
{
"states" => [
{
"name" => "Texas",
"id"=> "a1"
},
{
"name"=> "Nebraska",
"id"=> "a1"
}
]
},
{
"states" => [
{
"name"=> "New York",
"id"=> "a1",
},
{
"name" =>"Florida",
"id"=> "a1"
}
]
}
]
出于某些奇怪的原因,Ruby并没有接受“:”字符串。像这样(不起作用):
countries = [
{
"states": [
{
"name": "Texas",
"id": "a1"
},
{
"name": "Nebraska",
"id": "a1"
}
]
},
{
"states": [
{
"name": "New York",
"id": "a1",
},
{
"name" :"Florida",
"id": "a1"
}
]
}
]
为此,你可以这样做:
countries.map{ |c| c["states"].map{|s| s["name"]}}.flatten
#=> ["Texas", "Nebraska", "New York", "Florida"]
或者,如果你得到重复值,那么:
countries.map{ |c| c["states"].map{|s| s["name"]}}.flatten.uniq
#=> ["Texas", "Nebraska", "New York", "Florida"]
我希望这会有所帮助。
答案 1 :(得分:0)
去找苏里亚的答案,这是同样的解决方案。只是想表明我是怎么写的:
countries.map{|x|x['states']}
.flatten
.map{|x|x['name']}