2010-12-07 12 views
8

현재 다음과 같은 루비 해시로 작업하고 있습니다.루비 : 값으로 해시로 항목 찾기

{"employee"=>[{"name"=>"john", "level"=>"1", "position"=>"S1"}, 
       {"name"=>"bill", "level"=>"2", "position"=>"S2"}]} 

이들은 직원의 두 가지 예이며 값으로 직원을 끌어낼 수 있어야합니다. 예를 들어 레벨 == 2 인 모든 직원 또는 위치 == S1 인 모든 직원을 얻고 싶습니다.

Ruby에서 어떻게 할 수 있습니까?

+4

기호를 키로 사용하는 것이 좋습니다. – jwueller

+1

제안을 주셔서 감사합니다. 나는 덤프에서 코드를 가져 왔으며, 내부적으로 키를 가지고 있습니다. 어떻게 해결할 것인가가 변하거나 단순히 구문 제안을하는 것입니까? –

+0

@ 제레미 그것은 단지 제안 일뿐입니다. –

답변

23

Hash#select 또는 Array#select을 사용하십시오.

level_2_employees = infoHash["employee"].select {|k| k["level"] == "2"} 

사용자 조건에 따라 직원 정보 해시 배열을 반환합니다. 레벨 값을 따옴표로 묶으십시오.

5
ehash = {"employee"=>[{"name"=>"john", "level"=>"1", "position"=>"S1"}, 
         {"name"=>"bill", "level"=>"2", "position"=>"S2"}]} 
ehash['employee'].find_all { |e| e['level'] == 2} 
ehash['employee'].find_all { |e| e['position'] == 'S2'}