web-dev-qa-db-fra.com

Ruby Méthode de détection

Sélectionnez est logique. Mais quelqu'un peut-il m'expliquer .détecter? Je ne comprends pas ces données.

>> [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]
36
JZ.

Détecter renvoie le premier élément de la liste pour lequel le bloc renvoie VRAI. Votre premier exemple:

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

Renvoie 3 Car il s'agit du premier élément de la liste qui renvoie VRAI pour l'expression x.between?(3,4).

detect arrête l'itération après que la condition retourne true pour la première fois. select itérera jusqu'à ce que la fin de la liste d'entrée soit atteinte et retourne tous les éléments où le bloc a renvoyé true.

76
ryeguy

detect retourne juste la première valeur qui satisfait le prédicat, le cas échéant, nil sinon. select renvoie toutes les valeurs qui satisfont le prédicat. a.detect { p } est analogue à 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
9
Logan Capaldo

Les Ruby-docs sont une excellente ressource lorsque vous souhaitez en savoir plus sur les méthodes.

Enumerable # detect

5
Pran

find et detect renverra toujours un seul objet ou renverra nil si rien ne correspond:

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

find_all et select renverra un tableau de choses qu'il trouvera qui correspondent:

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

Lien de référence

4
Jacs