web-dev-qa-db-fra.com

Comment vérifier si un nombre est inclus dans une plage (en une seule déclaration)?

J'utilise Ruby on Rails 3.0.9 et je voudrais vérifier si un nombre est inclus dans une plage. Autrement dit, si j'ai une variable number = 5 Je voudrais vérifier 1 <= number <= 10 et récupérer une valeur booléenne si la valeur number est incluse dans cette plage.

Je peux faire ça comme ça:

number >= 1 && number <= 10

mais je voudrais le faire dans une déclaration. Comment puis je faire ça?

75
Backo

(1..10).include?(number) est l'astuce.

Btw: Si vous souhaitez valider un nombre à l'aide de ActiveModel::Validations, vous pouvez même faire:

validates_inclusion_of :number, :in => 1..10

lire ici sur validates_inclusion_of

ou le Rails 3 voies:

validates :number, :inclusion => 1..10
146
Mario Uher

Enumerable # include? :

(1..10).include? n

Couverture # Range? :

(1..10).cover? n

# comparable entre? :

n.between? 1, 10

Validateur de numérité :

validates :n, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 10}

validateur d'inclusion :

validates :n, inclusion: 1..10
55
tybro0103

Si cela ne fait pas partie d'un processus de validation, vous pouvez utiliser #between?:

2.between?(1, 4)
=> true
16
Holin

Pour des messages d'erreur précis sur un formulaire soumis, essayez ces

validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 1, message: 'must be between 0 & 100'
4
Jon

Rails 4

si vous le souhaitez via ActiveModel :: Validations, vous pouvez utiliser

validates_inclusion_of :number, :in => start_number..end_number

ou la syntaxe Rails 3

validates :number, :inclusion => start_number..end_number

Mais la façon la plus simple que je trouve est

number.between? start_number, end_number

3

Dans Ruby 1.9 la traduction la plus directe semble être Range # cover? :

Renvoie true si obj se situe entre le début et la fin, c'est-à-dire beg <= obj <= end (ou end exclusif lorsque exclude_end? Est vrai).

Si vous vous demandez en quoi c'est différent de Range#include?, c'est que ce dernier itère sur tous les éléments de la plage s'il s'agit d'une plage non numérique. Voir ceci article de blog pour une explication plus détaillée.

2
Michael Kohl

Si vous souhaitez vérifier qu'un nombre particulier existe dans un tableau personnalisé,

Comme par exemple, je veux savoir si 5 est inclus dans la liste = [1,4,6,10] ou non

list.include? 5 => false
list.include? 6 => true
0
Lakhani Aliraza