2011-09-09 5 views
0
내가 중첩 된 해시와 장난 그리고 난 내 해시 중첩 한 경우 여러 개의 키를 가져 오는 방법을 알아 내려고 노력하고있어

: 나는 중첩 된 값을 검색하는 방법을 알고중첩 해시가있는 여러 해시 키를 가져 오는 방법은 무엇입니까?

imahash = { :id => { :name => "Alma", :email => "[email protected]" }, 
      :stats => { :gender => "Female" }, 
      :location => { :city => "Freeport", :state => "Maine" } 
      } 

,를 입력하면 해시 이름은 모든 키와 값을 덤프합니다. 하지만 내가하고 싶은 일은 이름과 성별과 같은 특정 키를 가져 오는 것입니다. 또는 : 이름과 : 도시에만 해당됩니다.

이것이 가능합니까? 왜냐하면 내가 찾은 바에 따르면 한 번에 하나의 키 또는 모든 키에 대한 해시 값만 검색 할 수있는 것 같습니다. 난 당신이 튜플의 값을 잡아하려는 가정

=> { :id => { :name => "Alma" }, :location => { :city => "Freeport" } } 

답변

0

:

내 원하는 출력 뭔가 같은 것? 원하는 값의 컬렉션을 포함하는 배열을 만들 수 있습니다.

이름과 도시에 대해 다음보십시오 :

[imahash[:id][:name], imahash[:location][:city]] 
=> ["Alma", "Freeport"] 
+0

초래 성별 그래, 튜플 나는 그것이 (? 단지 정렬 된 목록을 오른쪽으로) 생각하는 경우 , 그리고 나서 새로운 배열을 생성합니다 (또는 mportiz의 대답과 같이 새로운 것을 가지고 있습니다). 관심이 없으면 새 해시/배열을 만들지 않고 출력을 얻을 수있는 방법이 있습니까? – Murmur

+0

중첩 해시 (xml 문서의 경우 xpath와 유사)를 탐색하기위한 '해시 경로'배열을 사용하는 함수를 만들면 imahash를 한 번만 참조 할 수 있습니다. 당신이 새로운 해시/배열을 만들지 않고도 할 수 있는지 의심. 효율성을 이유로 요구하는 경우 조기 최적화 IMHO입니다. – peakxu

+0

오케이, 이해합니다. 그래, 난 효율적인 이유로 주로 요구했다. 그게 전부 다 알았어, 고마워. – Murmur

0

아니 정확히 당신이 여기에 요구하고 있지만, 하나 더 큰에서 새 해시를 생성하고자하는 것처럼 보인다 무엇인지. 이름 :

특정 같은 키를 가져 오기 위해 단지
name_and_gender_hash = { 
    :name => imahash[:id][:name], 
    :gender => imahash[:stats][:gender] 
} 

{:name => "Alma", :gender => "female"} 
+0

새 해시 만들기가 작동합니다. 이것은 내가 가져 왔던 각각의 키에 대해 "imahash"를 사용할 필요가 있다는 점에서 제 질문의 한 부분에 응답합니다. 나는 한 줄로 할 수 없다. 거기에 새로운 해시를 생성하지 않고 출력을 달성하는 방법이 있습니까? – Murmur

+0

무슨 뜻인지 확실하지 않습니다. 두 필드가 모두 포함 된 문자열을 원하십니까? 출력물을 원하는대로 불분명 함. – mportiz08

관련 문제