2010-08-05 41 views
18

que tiene la siguiente matriz:Ruby: seleccione un hash desde el interior de una matriz

response = [{"label"=>"cat", "name"=>"kitty", "id"=>189955}, {"label" => "dog", "name"=>"rex", "id" => 550081}] 

¿Cómo selecciono el hash que contiene el gato etiqueta? Sé que response.first me dará el mismo resultado, pero quiero buscar en la etiqueta por.

Gracias!

Deb

Respuesta

37
response.find {|x| x['label'] == 'cat' } #=> {"label"=>"cat", "name"=>"kitty", "id"=>189955} 
+0

Cada vez más estoy descubriendo que Ruby es realmente impresionante (por muchas razones, una de las cuales siendo estos métodos de conveniencia pequeños). –

10

Probar:

response.select { |x| x["label"] == "cat" } 
+0

seleccionar funciona también, pero devuelve una matriz, por lo que voy con "buscar" en este caso particular. ¡Gracias! :) – deb

+5

Sí, 'Array # find' devuelve la primera coincidencia o nil, mientras' Array # select' y 'Array # find_all' devuelven una matriz de todos los elementos coincidentes. – Zargony

+1

Y también vale la pena señalar que un sinónimo de 'Array # find' es' Array # detect'. – PreciousBodilyFluids

Cuestiones relacionadas