2014-10-20 5 views
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"}, 
    ... 
    ] 
} 

내가 키 city을 위해를 통하여 반복하고 모든 값을 인쇄하고 싶습니다 :

Woodbridge, VA 
Fort Nelson, BC 
... 
+0

감사합니다. 4 개의 공백으로 "코드"를 들여 쓰려고했으나 작동하지 않았습니다 ...? – cchan23

+0

'@ locations '란 무엇입니까? –

+0

4- 스페이스 들여 쓰기에는 코드 블록 주위에 빈 줄이 필요합니다. –

답변

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"] 
+0

정말 고마워. 이것은 트릭을했다. 나는 아마도이 솔루션을 독자적으로 사용했을 것입니다. 그러나 데이터 세트의 오리지널 오해로 인해 버려졌습니다. 다른 사람들이 귀하의 답변을 참조하고 사용할 수 있도록 원래 질문의 형식을 업데이트했습니다. 건배 – cchan23

1

어쨌든, 그 구조를 가지고 왜 내가 말할 수 없다, 이것은 당신이 항상 필요한 도시 어레이로 배열의 두 번째 객체를 기대할 수 있음을 의미한다,하지만 위 가지고있는 데이터 형식으로, 당신은

@locations[1].each { |c| p c["city"] } 

처럼 액세스 할 것입니다. 또한 필수 nil 점검을 입력해야합니다.

+0

빠른 응답을 보내 주셔서 감사합니다! 나는 당신의 솔루션을 시도하고 "정의되지 않은 메서드'each 'for nil : NilClass"가 나타납니다. 나는 당신이 새로운 nil 수표를 넣기 위해 새로운 말을했다고 읽었습니다. 아마 나는 그것을하지 않았다. 나는 어디에서 nil을 체크 할 것인가? – cchan23

+0

배열에 두 번째 요소가 없을 가능성이 있습니다. '@ locations '를 출력하고 두 번째 요소가 포함되어 있는지 확인할 수 있습니다. 'p @locations [1]'처럼. 위의 코드를'@locations [1] .each {| c | p c [ "city"]} 않는 한 @ locations.nil? && @locations [1] .nil?'. 위에 입력 한 데이터 형식은 나에게 신뢰할 수없는 것처럼 보입니다. – ch4nd4n

+0

어리석은 나를. 데이터 구조를 잘못 읽은 것 같습니다. 업데이트 된 정보를 참조 할 수 있습니까? 원래 게시물의 맨 아래에 데이터 구조를 넣었습니다. – cchan23

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

을함으로써, 당신은 단지 그들을 통해 통합하고 당신이 언급 한대로 오류 nil을 얻는 경우이

@locations["cities"].map{|hash| p hash['city']} 

같은 인쇄 결과를 얻을 수 있습니다 댓글에서 해시 배열에 액세스하려고하면 어떻게되는지보십시오. 그래도 문제가 발생하는 경우 문제가 어디인지 파악할 수 있도록 전체 입력을 제공해야 할 수 있습니다. 수정 된 데이터 형식에 대한

+0

도움 주셔서 감사합니다. 나는 당신의 솔루션이 효과가 있었을 것이라고 믿는다. (그리고 그것을 설명하는 데 시간을내어 주셔서 감사합니다!),하지만 나는 데이터 구조를 잘못 읽었습니다 ... 나는 생각합니다. 나는 밑바닥에 원래 포스트를 새롭게했다. 이제는 "도시"키를 사용하여 해시를 처리하고 있다고 생각합니다. 값은 해시 배열입니다. – cchan23

+0

글쎄, 당신은 많이 바꿀 필요가 없다. 그냥 열쇠를 가져 와서 반복한다. –