2010-12-07 15 views
8
de hash por valores

que estoy trabajando actualmente con un hash de rubí que se parece a lo siguiente:Ruby: Buscar material en las

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

Estos son dos ejemplos de los empleados y tengo que ser capaz de tirar a cabo por los empleados valores. Por ejemplo, me gustaría obtener todos los empleados cuyo nivel sea == 2, o todos los empleados cuya posición sea == S1.

¿Cómo puedo hacer esto en Ruby?

+4

Recomiendo usar símbolos como teclas. – jwueller

+1

Gracias por la sugerencia, saqué el código de un volcado, son claves internas, ¿eso cambia la forma en que lo resolvería o simplemente hace sugerencias de sintaxis? –

+0

@Jeremy Es solo una sugerencia. –

Respuesta

23

Utilice Hash#select o Array#select.

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

Esto devolverá una matriz de hash de información de empleados según sus criterios. Asegúrese de poner comillas alrededor del valor para el nivel

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'} 
Cuestiones relacionadas