Ruby Detect method

The ruby-docs are a great ressource when you want to learn about the methods.

Enumerable#detect


detect just returns the first value that satisfies the predicate, if any, nil otherwise. select returns all the values that satisfy the predicate. a.detect { p } is analogous to a.select { p }[0]

 irb(main):001:0> [1,2,3].detect { true }
 => 1
 irb(main):002:0> [1,2,3].detect { false }
 => nil
 irb(main):003:0> [1,2,3].detect { |x| x % 2 == 0 }
 => 2

find and detect will always either return a single object or they will return nil if nothing is matched:

[1,2,3,4,5,6,7].detect { |x| x.between?(1,7) }
=> 1

find_all and select will return an array of things that it finds that match:

[1,2,3,4,5,6,7].select { |x| x.between?(1,7) }
=> [1, 2, 3, 4, 5, 6, 7]

Reference Link


Detect returns the first item in the list for which the block returns TRUE. Your first example:

>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,4) }
=> 3

Returns 3 because that is the first item in the list that returns TRUE for the expression x.between?(3,4).

detect stops iterating after the condition returns true for the first time. select will iterate until the end of the input list is reached and returns all of the items where the block returned true.

Tags:

Ruby

Detect