Có cách nào ngắn hơn để tìm phần tử đầu tiên trong một cuộc họp mảng một số điều kiện hơn thế này:yếu tố đầu tiên của một mảng với điều kiện
my_array[ my_array.index {|x| x.some_test} ]
Có cách nào ngắn hơn để tìm phần tử đầu tiên trong một cuộc họp mảng một số điều kiện hơn thế này:yếu tố đầu tiên của một mảng với điều kiện
my_array[ my_array.index {|x| x.some_test} ]
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)
Đố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.
Và 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
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 :) –
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. –
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ó thể được rút ngắn cho 'my_array.find (&: some_test)' –
@LarsHaugseth: bạn nói đúng, tất nhiên. Cảm ơn. –