2010-08-05 11 views
18

Ho il seguente array:Rubino: selezionare un hash da dentro una matrice

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

Come si seleziona l'hash che contiene il gatto etichetta? So che lo response.first mi darà lo stesso risultato, ma voglio cercare per etichetta.

Grazie!

Deb

risposta

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

Sempre più sto scoprendo che Ruby è solo davvero impressionante (per molte ragioni, l'ultimo dei quali essendo questi piccoli metodi di convenienza). –

10

Prova:

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

seleziona anche opere, ma restituisce un array, quindi vado con "trova" in questo caso particolare. Grazie! :) – deb

+5

Sì, 'Array # find' restituisce la prima corrispondenza o nil, mentre' Array # select' e 'Array # find_all' restituiscono una matrice di tutti gli elementi corrispondenti. – Zargony

+1

E vale anche la pena notare che un sinonimo di "Array # find" è "Array # detect". – PreciousBodilyFluids