2010-08-05 29 views
18

tôi có các mảng sau:Ruby: chọn một hash từ bên trong một mảng

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

Làm thế nào để chọn băm chứa mèo nhãn? Tôi biết response.first sẽ cho tôi kết quả tương tự, nhưng tôi muốn tìm kiếm theo nhãn.

Cảm ơn!

Deb

Trả lời

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

Ngày càng có nhiều tôi phát hiện ra rằng Ruby là chỉ thực sự tuyệt vời (vì nhiều lý do, ít nhất trong số đó là những phương pháp thuận tiện chút). –

10

Hãy thử:

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

cũng chọn công trình, nhưng nó trả về một mảng, vì vậy tôi sẽ tìm "tìm" trong trường hợp cụ thể này. Cảm ơn! :) – deb

+5

Có, 'Array # find' trả về kết quả đầu tiên hoặc nil, trong khi' Array # select' và 'Array # find_all' trả về một mảng của tất cả các phần tử phù hợp. – Zargony

+1

Và nó cũng đáng chú ý là một từ đồng nghĩa cho 'Array # find' là' Array # detect'. – PreciousBodilyFluids

Các vấn đề liên quan