루비

2014-01-30 3 views
0

지도를 이용하여 서브 요소의 배열을 반환하기 구조 I 가지고루비

"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 } } 

그러나 첫 번째 2 statest '텍사스'와 네브라스카를 반환 는 여기에 내가 시도하는 것이다.

누군가 내가 여기서 잘못하고있는 것을 말해 줄 수 있습니까?

+0

'countries.map {| country | 국가 [ 'states'].지도 {| 상태 | state.name}}' – apneadiving

+0

"구조"는 거의 오류가없는 것으로 보입니다. 어떻게 그것을 생성 했습니까? – vee

+0

당신은 중괄호'''앞에'states' :'}를 놓쳤습니다. "states": [[ –

답변

0

당신의 구조를 잘하지, 그래서 수정 :

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 = [ 
     { 
     "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.uniq 
#=> ["Texas", "Nebraska", "New York", "Florida"] 

을 나는이 희망 도움이됩니다.

0

수리야의 대답을 찾으십시오. 동일한 해결책입니다. 그냥 내가 쓰는 방법을 보여주고 싶다 :

countries.map{|x|x['states']} 
     .flatten 
     .map{|x|x['name']}