web-dev-qa-db-ja.com

(1つのステートメントで)数値が範囲に含まれているかどうかを確認する方法は?

Ruby on Rails 3.0.9を使用しており、数値が範囲に含まれているかどうかを確認したい。つまり、変数がある場合number = 5確認したい1 <= number <= 10およびnumber値がその範囲に含まれる場合、ブール値を取得します。

私はこれを次のように行うことができます:

number >= 1 && number <= 10

しかし、私は1つのステートメントでそれをしたいと思います。どうやってやるの?

75
Backo

(1..10).include?(number)はトリックです。

Btw:ActiveModel::Validationsを使用して数値を検証する場合は、次のこともできます。

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

読み取り ここ validates_inclusion_ofについて

またはRails 3つの方法:

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

Enumerable#include?

(1..10).include? n

Range#cover?

(1..10).cover? n

Comparable#between?

n.between? 1, 10

数値検証

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

Inclusion Validator

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

検証プロセスの一部ではない場合は、#between?

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

フォーム送信の正確なエラーメッセージについては、これらを試してください

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

activeModel :: Validationsで使用したい場合

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

またはRails 3構文

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

しかし、私が見つける最も簡単な方法は

number.between? start_number, end_number

3

Ruby 1.9で最も直接的な翻訳は Range#cover?

Objがbegとendの間にある場合、つまり、beg <= obj <= end(またはexclude_end?がtrueの場合はend Exclusive)の場合、trueを返します。

それがRange#include?、非数値範囲の場合、後者は範囲のすべての要素を反復処理します。詳細な説明については、こちらをご覧ください ブログ投稿 .

2
Michael Kohl

特定の番号がカスタム配列に存在することを確認する場合は、

たとえば、list = [1,4,6,10]に5が含まれているかどうかを知りたい

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