Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी रेंज:वे कैसे काम करते हैं?

रूबी में रेंज क्या है और यह कैसे काम करती है?

एक श्रेणी एक ऐसी वस्तु है जिसका प्रारंभिक मूल्य और समाप्ति मूल्य होता है, वे आपको अनुक्रम बनाने में मदद करते हैं जो इन दो मानों के बीच पूरी श्रृंखला को फैलाते हैं।

आप 1 . से जा सकते हैं करने के लिए 20 , या "a" . से करने के लिए "z"

इस लेख में आप जानेंगे :

  • रूबी रेंज कैसे बनाएं
  • step का उपयोग कैसे करें &include? रूबी में तरीके
  • श्रेणियां कैसे काम करती हैं

चलो यह करते हैं!

श्रेणियों को समझना

एक अनुस्मारक के रूप में, रूबी रेंज सिंटैक्स इस तरह दिखता है:

(1..20)

Range . को परिभाषित करने के लिए कोष्ठक आवश्यक नहीं है ।

लेकिन अगर आप अपनी सीमा पर विधियों को कॉल करना चाहते हैं तो आपको उनकी आवश्यकता होगी। अन्यथा, आप विधि को श्रेणी के बजाय, श्रेणी के दूसरे तत्व पर बुला रहे हैं।

Range क्लास में एन्यूमरेबल शामिल है, इसलिए आपको रेंज को किसी ऐरे में बदले बिना सभी शक्तिशाली इटरेशन मेथड्स मिलते हैं।

रूबी चरण विधि

Range कुछ उपयोगी तरीके हैं, जैसे step विधि।

उदाहरण :

(10..20).step(2).to_a
# [10, 12, 14, 16, 18, 20]

इस पद्धति का उपयोग करके आप n . की वृद्धि में सीमा पर पुनरावृति कर सकते हैं , जहां n क्या तर्क step . को दिया गया है ।

कैसे पता करें कि कोई संख्या एक सीमा के अंदर है या नहीं

अन्य Range जागरूक होने के तरीके हैं:cover? &include?

यह सोचना गलत होगा कि वे वही काम करते हैं, क्योंकि वे ऐसा नहीं करते हैं।

include? विधि वही करती है जो आप उम्मीद करते हैं, सीमा के अंदर शामिल करने की जांच करें। तो यह Range . का विस्तार करने के बराबर होगा एक Array . में और जाँच कर रहा है कि वहाँ कुछ है या नहीं।

लेकिन cover? अलग है, यह केवल श्रेणी के आरंभिक और अंतिम मानों के विरुद्ध जांच करता है (begin <= obj <= end ), जो अप्रत्याशित परिणाम दे सकता है।

उदाहरण :

('a'..'z').include? "cc" # false
('a'..'z').cover? "cc"   # true

cover? उदाहरण इसके बराबर है:

"a" <= "cc" && "cc" <= "z"

इसका कारण true लौटाता है क्या यह है कि स्ट्रिंग्स की तुलना चरित्र के अनुसार की जाती है . चूंकि "ए" "सी" से पहले आता है, इसलिए पहले "सी" के बाद आने वाले अक्षर मायने नहीं रखते।

रूबी में रेंज कैसे लागू की जाती हैं

रेंज केवल संख्याओं और अक्षरों तक सीमित नहीं हैं, आप किसी भी ऑब्जेक्ट का उपयोग तब तक कर सकते हैं जब तक वे निम्नलिखित विधियों को लागू करते हैं:<=> और succ

उदाहरण के लिए, यहाँ एक दिनांक समय सीमा है:

require 'time'

t1 = DateTime.new
t2 = DateTime.new + 30

next_30_days = t1..t2

# Example use
next_30_days.select(&:friday?).map(&:day)

यह कैसे काम करता है? आइए इस कार्यान्वयन पर एक नज़र डालें:

def range(a, b)
  # if the first element is bigger than the second
  # then this isn't a sequential range
  return [] if a > b

  out = []

  # advance until the 2nd element is the same
  # as the first one
  while a != b
    out << a
    a = a.next
  end

  # add last element (inclusive range)
  # this also returns the results via implicit return
  out << a
end

p range 1, 10
p range 'a', 'z'

क्या हो रहा है इसे समझने में आपकी सहायता के लिए मैंने कुछ टिप्पणियां जोड़ीं।

विचार यह है कि हम अगली विधि को पहली वस्तु पर तब तक बुलाते रहते हैं जब तक कि यह दूसरी वस्तु के बराबर न हो, धारणा यह है कि वे अंततः मिलेंगे।

कस्टम क्लास रेंज

अधिकांश समय आप संख्या और वर्ण श्रेणियों का उपयोग कर रहे होंगे, लेकिन यह जानना अभी भी अच्छा है कि आप कस्टम वर्ग में श्रेणियों का उपयोग कैसे कर सकते हैं।

उदाहरण :

class LetterMultiplier
  attr_reader :count

  include Comparable

  def initialize(letter, count)
    @letter = letter
    @count  = count
  end

  def succ
    self.class.new(@letter, @count + 1)
  end

  def <=>(other)
    count <=> other.count
  end
end

a = LetterMultiplier.new('w', 2)
b = LetterMultiplier.new('w', 8)

# Print array with all the items in the range
p Array(a..b)

यहां कुंजी यह सुनिश्चित करने के लिए है कि आप <=> . को लागू करते हैं &succ तरीके सही हैं।

यदि आप include? . का उपयोग करना चाहते हैं Comparable . को शामिल करने के लिए आपको जिस विधि की आवश्यकता है मॉड्यूल, जो == . जैसी विधियों को जोड़ता है , < , और > (सभी <=> . के नतीजों पर आधारित हैं विधि)।

निष्कर्ष

इस लेख में आपने सीखा है कि रूबी में श्रेणियां कैसे काम करती हैं ताकि आप उन्हें बेहतर ढंग से समझ सकें और अपनी खुद की वस्तुओं को लागू कर सकें जो रेंज संचालन का समर्थन करती हैं।

नीचे दिए गए न्यूज़लेटर की सदस्यता लेना न भूलें ताकि आप अगली पोस्ट से न चूकें 🙂


  1. रूबी 2.6 में एमजेआईटी क्या है और यह कैसे काम करता है?

    रूबी के प्रदर्शन में बहुत सुधार हो रहा है, संस्करण दर संस्करण… और रूबी विकास टीम रूबी को और भी तेज बनाने के लिए हर संभव प्रयास कर रही है! इन प्रयासों में से एक 3×3 परियोजना है। लक्ष्य? रूबी 3.0, रूबी 2.0 से 3 गुना तेज होगा । इस प्रोजेक्ट का एक हिस्सा नया MJIT कंपाइलर है, जो इस लेख का विषय है। MJ

  1. रूबी में स्ट्रक्चर और ओपनस्ट्रक्चर का उपयोग कैसे करें?

    रूबी में स्ट्रक्चर क्या है? एक संरचना एक अंतर्निहित रूबी वर्ग है, इसका उपयोग नए वर्ग बनाने के लिए किया जाता है जो मूल्य वस्तुओं का उत्पादन करते हैं। संबंधित विशेषताओं को एक साथ संग्रहीत करने के लिए एक मूल्य वस्तु का उपयोग किया जाता है। यहां एक उदाहरण दिया गया है : एक Point दो निर्देशांकों के साथ

  1. Spotify प्लेलिस्ट को सहयोगात्मक कैसे बनाएं और वे कैसे काम करते हैं

    अगर आप Spotify पर हैं और आपको संगीत का अच्छा शौक है, तो आप अपने खाते से Spotify प्लेलिस्ट को हमेशा सार्वजनिक कर सकते हैं। इस तरह, आप दुनिया को अपने अद्भुत संगीत संग्रह के बारे में बता सकते हैं। लेकिन, आपको पता होना चाहिए कि आपकी प्लेलिस्ट वाकई कमाल की होनी चाहिए। Spotify के पास प्लेलिस्ट बनाने के लि