Select makes sense. But can someone explain .detect to me? I don't understand these data.
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,4) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,6) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(3,7) }
=> 3
>> [1,2,3,4,5,6,7].detect { |x| x.between?(2,7) }
=> 2
>> [1,2,3,4,5,6,7].detect { |x| x.between?(1,7) }
=> 1
>> [1,2,3,4,5,6,7].detect { |x| x.between?(6,7) }
=> 6
>> [1,2,3,4,5,6,7].select { |x| x.between?(6,7) }
=> [6, 7]
>> [1,2,3,4,5,6,7].select { |x| x.between?(1,7) }
=> [1, 2, 3, 4, 5, 6, 7]
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.