रूबी हैश क्या है?
एक हैश एक डेटा संरचना है जिसका उपयोग UNIQUE कुंजी-मान जोड़े के रूप में डेटा स्टोर करने के लिए किया जाता है। सरणियों के विपरीत, कोई संख्यात्मक इंडेक्स नहीं होते हैं, आप कुंजियों के साथ हैश मानों तक पहुंचते हैं।
उदाहरणों में शामिल हैं:
- देश के नाम और उनके संबंधित देश कोड की सूची (जैसे ES ⇾ स्पेन)
- एक डिक्शनरी, जहां हर शब्द में संभावित परिभाषाओं की सूची होती है
- एक डोमेन नाम और उसका IP पता
अपने रूबी प्रोग्राम्स में हैश का उपयोग करना सही स्थिति में उपयोग किए जाने पर आपके कोड को तेज कर सकता है।
दूसरे शब्दों में:
आपके पास डेटा है जो (या इसमें परिवर्तित किया जा सकता है) डिक्शनरी-जैसे प्रारूप में, जहां डेटा को कुंजियों द्वारा समूहीकृत किया जा सकता है और संबंधित मानों से जोड़ा जा सकता है।
हैश कैसे बनाएं
ठीक है।
हमें हैश क्या है इसका सामान्य विचार मिल गया, लेकिन आप इसे कैसे बनाते हैं?
इस तरह:
{} यह एक खाली हैश है!
तीन कुंजी/मान जोड़े वाला हैश इस तरह दिखता है:
{ 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 या false मान लौटाता है।
सारांश
आपने रूबी हैशेस के बारे में सीखा, एक सहायक डेटा संरचना जो कुंजी-मान जोड़ों से बनी है। आपने यह भी सीखा कि कुंजी द्वारा हैश कैसे एक्सेस करें, और हैश में नया डेटा कैसे संग्रहीत करें।
अब irb (या pry) खोलें और हैश के साथ खेलना शुरू करें!
पढ़ने के लिए धन्यवाद 🙂