रूबी हैश क्या है?
हैश एक डेटा संरचना है जिसका उपयोग डेटा को 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) खोलें और हैश के साथ खेलना शुरू करें!
पढ़ने के लिए धन्यवाद