2012-11-12 37 views

Trả lời

82

Hãy thử điều này:

my_array.find{|x| x.some_test } 

Hoặc đây là một phím tắt (cảm ơn @LarsHaugseth vì đã nhắc nhở về điều đó)

my_array.find(&:some_test) 
+3

có thể được rút ngắn cho 'my_array.find (&: some_test)' –

+0

@LarsHaugseth: bạn nói đúng, tất nhiên. Cảm ơn. –

4

Đối với tôi, có vẻ khó hiểu. Như tôi đang mong nhận được nhiều hơn một đối tượng cho một yêu cầu như vậy.

Tôi thích sử dụng detect để nhận riêng biệt.

select để tìm tất cả chúng.

Ở đây những gì docs ruby ​​nói về họ:

detect(ifnone = nil) {| obj | block } → obj or nil click to toggle source 
find(ifnone = nil) {| obj | block } → obj or nil 
detect(ifnone = nil) → an_enumerator 
find(ifnone = nil) → an_enumerator 

Passes mỗi mục trong enum chặn. Trả về giá trị đầu tiên cho khối nào không sai. Nếu không có đối tượng nào phù hợp, hãy gọi ifnone và trả về kết quả của nó khi nó được chỉ định, hoặc trả về nil nếu không.

find_all {| obj | block } → array click to toggle source 
select {| obj | block } → array 
find_all → an_enumerator 
select → an_enumerator 

Trả về một mảng chứa tất cả các yếu tố của enum mà khối là không sai

+1

tìm/phát hiện, bản đồ/thu thập, giảm/tiêm - có một phương pháp cho tất cả mọi người :) –

+5

Với tôi, 'phát hiện 'không giống như một phương pháp đúng. 'find' ít nhất có thể * tìm * và trả lại một cái gì đó. Những gì 'phát hiện' làm và trả về - tôi không có ý tưởng mà không cần tham khảo tài liệu. –

+0

Tuy nhiên, cộng đồng ruby ​​chủ yếu được giải quyết trên 'tìm'. Một lý do chính đáng để bạn chuyển đổi. – pguardiario

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