यदि कोई संख्या सीमा में (एक कथन में) शामिल है, तो कैसे जांचें?


85

मैं रूबी 3.0.9 पर रूबी का उपयोग कर रहा हूं और यह जांचना चाहूंगा कि क्या कोई संख्या एक सीमा में शामिल है। यही है, अगर मेरे पास एक चर है, तो मैं एक बूलियन मान की number = 5जांच करना 1 <= number <= 10और पुनर्प्राप्त करना चाहूंगा यदि numberमूल्य उस सीमा में शामिल है।

मैं ऐसा कर सकता हूं:

number >= 1 && number <= 10

लेकिन मैं एक बयान में ऐसा करना चाहूंगा। मैं उसे कैसे कर सकता हूँ?


चूँकि आपके उद्धृत कथन में कुछ भी गलत नहीं है, इसलिए यह सवाल उठता है: इसे आगे "छोटा" करने की आवश्यकता क्यों है?
डार्कडस्ट

1
@DarkDust - जितना संभव हो उतना कम कोड!
बैक जूल

जवाबों:


161

(1..10).include?(number) चाल है।

Btw: यदि आप किसी नंबर का उपयोग करके सत्यापन करना चाहते हैं ActiveModel::Validations, तो आप भी कर सकते हैं:

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

यहाँ पढ़िए validates_inclusion_of के बारे में

या रेल 3+ रास्ता:

validates :number, :inclusion => 1..10

क्या होगा अगर मैं भी शून्य की अनुमति देना चाहता हूं? शून्य होने पर मुझे एक त्रुटि मिल रही है।
14:250 पर user2503775

5
रेल के पास एक विकल्प है allow_nil। बस इसे इस तरह से जोड़ें:, allow_nil: true
मारियो Uher

64

गणनीय # शामिल हैं? :

(1..10).include? n

रेंज # कवर? :

(1..10).cover? n

के बीच तुलनीय #? :

n.between? 1, 10

न्यूमेरिकलिटी वैलिडेटर :

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

समावेशन सत्यापनकर्ता :

validates :n, inclusion: 1..10

1
मुझे यह तरीका बेहतर लगता है, क्योंकि सत्यापन पाठ अधिक समझ में आता है।
दान

मुझे यह बेहतर लगता है क्योंकि मैं पहले से ही सत्यापन संख्यात्मकता था। इसे एक-लाइन बनाता है :)
ब्रैडग्रेन

@ ब्रैडग्रेन एक लंबी लाइन है।
व्रचिनि

1
मैं यह नोट करना चाहता हूं कि यू का उपयोग कर सकते हैं यदि यू को कुछ विशिष्ट तर्क या संघों तक पहुंच की आवश्यकता हो। उदाहरण के लिएvalidates :amount, numericality: { less_than_or_equal_to: ->(m) { m.user.balance }, greater_than_or_equal_to: 0 }
Евгений Масленков

16

यदि यह एक सत्यापन प्रक्रिया का हिस्सा नहीं है जिसका आप उपयोग कर सकते हैं #between?:

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

6

फ़ॉर्म सबमिट पर सटीक त्रुटि संदेशों के लिए, इन्हें आज़माएं

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

3

रेलें ४

यदि आप इसे ActiveModel के माध्यम से चाहते हैं :: मान्यताओं का उपयोग कर सकते हैं

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

या रेल 3 वाक्यविन्यास

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

लेकिन सबसे आसान तरीका मुझे लगता है

number.between? start_number, end_number


शायद कुछ स्पष्टीकरण शामिल हैं।
जीएमक्रिस

2

रूबी 1.9 में सबसे सीधा अनुवाद रेंज # कवर लगता है ? :

सही है अगर obj भीख और अंत के बीच में है, तो भीख माँगती है <= obj <= end (या अनन्य को समाप्त करें जब बाहर रखा गया है? सच है)।

यदि आप आश्चर्यचकित हैं कि यह किस प्रकार से भिन्न है Range#include?, तो यह है कि उत्तरार्द्ध श्रेणी के सभी तत्वों पर पुनरावृत्ति करता है यदि यह एक गैर-संख्यात्मक सीमा है। अधिक विस्तृत विवरण के लिए इस ब्लॉग पोस्ट को देखें ।


1

यदि आप चेक करना चाहते हैं कि विशेष संख्या कस्टम सरणी में मौजूद है,

उदाहरण के लिए मैं जानना चाहता हूं कि 5 सूची में शामिल है = [1,4,6,10] या नहीं

list.include? 5 => false
list.include? 6 => true
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.