2012-03-19 23 views
31

Cách nhanh nhất trong Ruby để lấy phần tử đếm được đầu tiên mà một khối trả về đúng là gì?Cách nhanh nhất trong Ruby để lấy phần tử đếm được đầu tiên mà một khối trả về đúng là gì?

Ví dụ:

arr = [12, 88, 107, 500] 
arr.select {|num| num > 100 }.first # => 107 

Tôi muốn làm điều này mà không cần chạy qua toàn bộ mảng, như select ý chí, vì tôi chỉ cần trận đấu đầu tiên.

Tôi biết mình có thể làm each và phá vỡ thành công, nhưng tôi nghĩ có một phương pháp riêng để thực hiện việc này; Tôi chỉ không tìm thấy nó trong tài liệu.

Trả lời

61

Một số lớp lõi ruby, bao gồm ArrayHash bao gồm các module Enumerable cung cấp nhiều phương pháp hữu ích để làm việc với các kiểu liệt kê.

Module này cung cấp find or detect methods mà thực hiện chính xác những gì bạn muốn đạt được:

arr = [12, 88, 107, 500] 
arr.find { |num| num > 100 } # => 107 

Cả hai tên phương pháp là từ đồng nghĩa với nhau và thực hiện chính xác như vậy.

+0

+1, tôi hoàn toàn quên mất 'tìm', duh. –

+0

Ah! 'find' là phương pháp tôi đang cố nhớ. Silly tôi, tôi đã nhìn vào các tài liệu cho 'Array', không phải 'Enumerable'. –

+4

cũng được biết đến trong thế giới Ruby là 'detect' – tokland

4
arr[arr.index {|num| num > 100 }] #=> 107 
+0

Đây không phải là những gì được yêu cầu mà là những gì tôi cần, cảm ơn !! – Gabber

1
arr.find{|el| el>100} #107 (or detect; it's in the Enumerable module.) 
Các vấn đề liên quan