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

रूबी हैश - परिभाषा, उदाहरण और तरीके:अंतिम गाइड

रूबी हैश क्या है?

हैश एक डेटा संरचना है जिसका उपयोग डेटा को UNIQUE कुंजी-मूल्य जोड़े के रूप में संग्रहीत करने के लिए किया जाता है। सरणियों के विपरीत, कोई संख्यात्मक अनुक्रमणिका नहीं हैं, आप हैश मानों को कुंजियों से एक्सेस करते हैं।

उदाहरणों में शामिल हैं :

  • देश के नाम और उनके संबंधित देश कोड की सूची (जैसे ES स्पेन)
  • एक शब्दकोष, जहां हर शब्द की संभावित परिभाषाओं की एक सूची होती है
  • डोमेन नाम और उसका आईपी पता

अपने रूबी कार्यक्रमों में हैश का उपयोग करना सही स्थिति में उपयोग किए जाने पर आपके कोड को तेज कर सकता है।

दूसरे शब्दों में :

आपके पास डेटा है जो एक शब्दकोश जैसा प्रारूप है (या बदला जा सकता है), जहां डेटा को कुंजियों और संबद्ध मानों द्वारा समूहीकृत किया जा सकता है।

हैश कैसे बनाएं

ठीक है।

हैश क्या है, इसका सामान्य विचार हमें मिलता है, लेकिन आप इसे कैसे बनाते हैं?

इसे पसंद करें :

{}

यह एक खाली हैश है!

तीन कुंजी/मान युग्मों वाला हैश ऐसा दिखाई देता है :

{ a: 1, b: 2, c: 3 }

जहां a एक कुंजी है, और 1 उस कुंजी के लिए संबंधित मान है। ध्यान दें कि की-वैल्यू पेयर को कॉमा से अलग किया जाता है।

अब :

आइए देखें कि आप अपने रूबी प्रोजेक्ट में सामान्य हैश विधियों के साथ हैश का उपयोग कैसे कर सकते हैं।

एक रूबी हैश में मान संग्रहीत करना

जैसा कि हम पहले ही देख चुके हैं, आप प्रारंभिक मानों के एक सेट के साथ हैश बना सकते हैं।

यहां एक और उदाहरण दिया गया है :

fruits = { coconut: 1, apple: 2, banana: 3 }

एक अन्य विकल्प मौजूदा हैश में नए मान जोड़ना है।

इसे पसंद करें :

fruits[:orange] = 4

यह है :orange हैश कुंजी के रूप में, और 4 इसके संगत मान के रूप में।

<ब्लॉकक्वॉट>

:orange . शब्द से पहले कोलन क्यों है? जब हम orange: . शब्द के बाद और किसी मान को एक्सेस करते हैं जब हम हैश बनाते हैं? यह एक बेहतर सिंटैक्स है जो आपको हैश-रॉकेट के बिना हैश बनाने की अनुमति देता है (=> ) प्रतीक, जो मान्य है, लेकिन इसे करने का पुराना तरीका है।

मान कोई भी रूबी वस्तु हो सकते हैं।

सहित :

  • स्ट्रिंग्स
  • पूर्णांक और फ़्लोट
  • सरणी

कुंजियाँ कुछ भी हो सकती हैं, लेकिन प्रतीक (जैसे :banana .) ) और तार सबसे सामान्य प्रकार की कुंजियाँ हैं जो आपको मिलेंगी।

याद रखें कि…

कुंजियाँ अद्वितीय हैं, हमारे पास केवल एक :orange हो सकता है कुंजी, या एक :apple कुंजी।

जब आप एक ही कुंजी को दो बार जोड़ते हैं तो आप उसका मान बदल देते हैं।

हैश से वैल्यू कैसे एक्सेस करें

आप कुंजी द्वारा हैश एक्सेस करते हैं।

यदि आपको मूल्यों को सीधे एक्सेस करने की आवश्यकता है, तो हो सकता है कि हैश आपके डेटा के लिए सही संरचना न हो।

उदाहरण :

fruits[:orange]
# 4

यह हैश का संपूर्ण बिंदु है, किसी आइटम को उसकी कुंजी से तुरंत देखने के लिए

यदि कोई कुंजी मौजूद नहीं है, तो आपको nil मिलेगा ।

fruits[:peach]
# nil

एक विकल्प के रूप में, आप fetch . का उपयोग कर सकते हैं विधि, जो आपको एक डिफ़ॉल्ट मान प्रदान करने की अनुमति देती है।

उदाहरण :

fruits.fetch(:peach, 0)

यदि आप fetch . का उपयोग करते हैं डिफ़ॉल्ट मान (दूसरा तर्क) के बिना, रूबी एक KeyError उठाएगी अपवाद।

यह मददगार है क्योंकि आपको पता चल जाएगा कि कौन सी कुंजी गुम है।

दो रूबी हैश को कैसे मर्ज करें

आप दो हैश ले सकते हैं और उन्हें एक साथ एक नए हैश में मिला सकते हैं।

यह कौन सी विधि करता है?

खैर, इसका अंदाजा लगाना मुश्किल नहीं है। विधि का नाम है merge

यहां इसका उपयोग करने का तरीका बताया गया है :

defaults    = { a: 1, b: 2, c: 3 }
preferences = { c: 4 }

defaults.merge!(preferences)
# {:a=>1, :b=>2, :c=>4}

ध्यान दें कि क्योंकि कुंजी अद्वितीय हैं , नए मान पुराने मानों को अधिलेखित कर देते हैं।

आप इस तथ्य का उपयोग दिलचस्प समाधानों के लिए कर सकते हैं, जैसे "डिफ़ॉल्ट" हैश बनाना जिसे उपयोगकर्ता अपने स्वयं के हैश पास करके ओवरराइड कर सकते हैं।

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

इसे पसंद करें :

defaults.merge!(preferences) { |key, old, new| [old, new].max }

जहां old defaults . से आने वाले मान हैं , और new preferences से आने वाले मान हैं ।

एक कुंजी के लिए कई मान

शब्दकोश में…

शब्द अद्वितीय हैं, लेकिन उनके कई मान हो सकते हैं (परिभाषाएं ) उनके साथ जुड़ा हुआ है।

आप इसे रूबी में कर सकते हैं!

उदाहरण :

dictionary = {
  opportunity: [
    "a set of circumstances that makes it possible to do something",
    "a situation or condition favorable for attainment of a goal"
  ],
  creativity: [
    "the use of imagination or original ideas to create something new",
    "the ability to create",
    "the process where new ideas emerge from combining existing ideas in new ways"
  ]
}

dictionary[:creativity][1]

जहां dictionary[:creativity] आपको एक सरणी देता है और [1] आपको उस सरणी से दूसरा तत्व देता है।

दूसरे शब्दों में :

कुंजी एक प्रतीक है और मान सरणियाँ हैं। जब आप हैश को एक्सेस करते हैं तो आपको एक ऐरे वापस मिलता है जिसे आप सामान्य रूप से एक्सेस करते हैं, जैसे कि कोई अन्य ऐरे।

हैश को कैसे सॉर्ट करें

आप सरणियों को क्रमबद्ध कर सकते हैं। लेकिन क्या आप जानते हैं कि आप हैश भी सॉर्ट कर सकते हैं?

जब आप sort करते हैं एक हैश, इसे कुंजी द्वारा क्रमबद्ध किया जाता है।

उदाहरण :

{ b: 1, a: 2 }.sort

# [[:a, 2], [:b, 1]]

लेकिन आप उन्हें मान के अनुसार क्रमित भी कर सकते हैं :

{ c: 3, b: 1, a: 2 }.sort_by(&:last)

आप देखेंगे कि हैश को सॉर्ट करने से आपको जो मिलता है वह दूसरा हैश नहीं है…

यह एक सरणी है!

लेकिन आप to_h . का उपयोग करके इस सरणी को वापस हैश में बदल सकते हैं विधि।

हैश से सभी कुंजी और मान प्राप्त करें

यदि आप सभी हैश कुंजियों की सूची चाहते हैं, तो अच्छी खबर है, उसके लिए एक तरीका है!

यह रहा :

{ apple: 1, banana: 2 }.keys

# [:apple, :banana]

एक ऐसी विधि भी है जो आपको मानों वाली एक सरणी प्रदान करती है :

{ apple: 1, banana: 2 }.values

# [1, 2]

यदि आप जानना चाहते हैं कि हैश में कोई कुंजी मौजूद है या नहीं, तो उनमें से एक सरणी प्राप्त करने के बजाय, key? का उपयोग करें विधि।

यह विधि true returns लौटाती है या false मूल्य।

सारांश

आपने रूबी हैश के बारे में सीखा, एक उपयोगी डेटा संरचना जो की-वैल्यू पेयर से बनी होती है। आपने यह भी सीखा कि कुंजी द्वारा हैश तक कैसे पहुंचा जाता है, और हैश में नया डेटा कैसे संग्रहीत किया जाता है।

अब irb (या pry) खोलें और हैश के साथ खेलना शुरू करें!

पढ़ने के लिए धन्यवाद


  1. रूबी ग्रेप विधि का उपयोग कैसे करें (उदाहरण के साथ)

    आइए बात करते हैं grep . के बारे में विधि। यह विधि आपके लिए क्या कर सकती है? आप ग्रेप का उपयोग एरेज़ और रेंज जैसी असंख्य वस्तुओं को फ़िल्टर करने के लिए कर सकते हैं। “लेकिन चुनें पहले से ही ऐसा करता है!” हां, लेकिन grep एक अलग तरीके से काम करता है और यह अलग परिणाम देता है। आइए कुछ उदाहरण देखें।

  1. रूबी डेवलपर्स के लिए समय की जटिलता के लिए निश्चित गाइड

    समय जटिलता सबसे दिलचस्प अवधारणाओं में से एक है जिसे आप कंप्यूटर विज्ञान से सीख सकते हैं, और आपको इसे समझने के लिए किसी डिग्री की आवश्यकता नहीं है! यह दिलचस्प है क्योंकि इससे आपको यह देखने में मदद मिलती है कि कोई विशेष एल्गोरिदम या प्रोग्राम धीमा क्यों हो सकता है और इसे और तेज़ बनाने के लिए आप क्या

  1. रूबी के ऐरे क्लास का उपयोग कैसे करें (उदाहरण + उपयोगी तरीके)

    एक सरणी क्या है? एक सरणी एक अंतर्निहित रूबी वर्ग है, जिसमें शून्य या अधिक वस्तुओं की सूची होती है , और इसमें वे विधियां शामिल हैं जो इन सभी वस्तुओं को आसानी से जोड़ने, एक्सेस करने और लूप करने में आपकी सहायता करती हैं। यह मददगार है, क्योंकि यदि सरणियाँ मौजूद नहीं होतीं तो आपको कई चरों का उपयोग करना