Ruby Detect method

前端 未结 4 1032
情书的邮戳
情书的邮戳 2021-01-31 03:00

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
>&g         


        
相关标签:
4条回答
  • 2021-01-31 03:13

    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.

    0 讨论(0)
  • 2021-01-31 03:22

    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

    0 讨论(0)
  • 2021-01-31 03:26

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

    Enumerable#detect

    0 讨论(0)
  • 2021-01-31 03:32

    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
    
    0 讨论(0)
提交回复
热议问题