रूबी में मौजूदा हैश में कैसे जोड़ें


102

key => valueरूबी में एक मौजूदा आबादी वाले हैश में एक जोड़ी जोड़ने के संबंध में, मैं एप्रेस की शुरुआत रूबी के माध्यम से काम करने की प्रक्रिया में हूं और अभी हैश अध्याय पूरा कर चुका हूं।

मैं हैश के साथ समान परिणाम प्राप्त करने का सबसे सरल तरीका खोजने की कोशिश कर रहा हूं क्योंकि यह सरणियों के साथ करता है:

x = [1, 2, 3, 4]
x << 5
p x

जवाबों:


189

यदि आपके पास कोई हैश है, तो आप इसे कुंजी द्वारा संदर्भित करके आइटम जोड़ सकते हैं:

hash = { }
hash[:a] = 'a'
hash[:a]
# => 'a'

यहाँ, [ ]एक खाली सरणी बनाता है, { }एक खाली हैश बनाएगा।

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

रूबी में हैश बहुत लचीले होते हैं और इसमें किसी भी प्रकार की चाबियां हो सकती हैं जिन्हें आप फेंक सकते हैं। यह इसे उन शब्दकोश संरचनाओं से अलग बनाता है जो आपको अन्य भाषाओं में मिलती हैं।

यह ध्यान रखना महत्वपूर्ण है कि हैश की कुंजी की विशिष्ट प्रकृति अक्सर मायने रखती है:

hash = { :a => 'a' }

# Fetch with Symbol :a finds the right value
hash[:a]
# => 'a'

# Fetch with the String 'a' finds nothing
hash['a']
# => nil

# Assignment with the key :b adds a new entry
hash[:b] = 'Bee'

# This is then available immediately
hash[:b]
# => "Bee"

# The hash now contains both keys
hash
# => { :a => 'a', :b => 'Bee' }

रूबी ऑन रेल्स इसे कुछ हद तक HashWithIndifferentAccess प्रदान करके भ्रमित करता है जहां यह पते के सिंबल और स्ट्रिंग तरीकों के बीच स्वतंत्र रूप से परिवर्तित हो जाएगा।

आप कक्षाओं, संख्याओं या अन्य Hashes सहित लगभग किसी भी चीज़ पर अनुक्रमण कर सकते हैं।

hash = { Object => true, Hash => false }

hash[Object]
# => true

hash[Hash]
# => false

hash[Array]
# => nil

Hashes को Arrays में बदला जा सकता है और इसके विपरीत:

# Like many things, Hash supports .to_a
{ :a => 'a' }.to_a
# => [[:a, "a"]]

# Hash also has a handy Hash[] method to create new hashes from arrays
Hash[[[:a, "a"]]]
# => {:a=>"a"} 

जब यह हैश में चीजों को "सम्मिलित" करने की बात आती है, तो आप इसे एक बार में कर सकते हैं, या mergeराख को संयोजित करने के लिए विधि का उपयोग कर सकते हैं :

{ :a => 'a' }.merge(:b => 'b')
# {:a=>'a',:b=>'b'}

ध्यान दें कि यह मूल हैश को परिवर्तित नहीं करता है, बल्कि एक नया रिटर्न देता है। यदि आप एक हैश को दूसरे में जोड़ना चाहते हैं, तो आप merge!विधि का उपयोग कर सकते हैं :

hash = { :a => 'a' }

# Returns the result of hash combined with a new hash, but does not alter
# the original hash.
hash.merge(:b => 'b')
# => {:a=>'a',:b=>'b'}

# Nothing has been altered in the original
hash
# => {:a=>'a'}

# Combine the two hashes and store the result in the original
hash.merge!(:b => 'b')
# => {:a=>'a',:b=>'b'}

# Hash has now been altered
hash
# => {:a=>'a',:b=>'b'}

स्ट्रिंग और एरे पर कई तरीकों की तरह, यह !इंगित करता है कि यह एक इन-प्लेस ऑपरेशन है।


12
बहुत सारी बहुमूल्य जानकारी, लेकिन सबसे बुनियादी सूत्रीकरण की कमी के रूप में तो बस @robbrit ने उत्तर दिया।
दानह

1
कृपया अपने उत्तर को वास्तव में पूछे गए प्रश्न का उत्तर देने के लिए संपादित करें, कहीं शीर्ष के पास अधिमानतः। तुम्हारे लिए ऐसा करना मेरे लिए असभ्य होगा।
स्टीफन

@ स्टेफ़न ने शीर्ष पर अधिक संक्षिप्त उदाहरण जोड़ा।
tadman



8
x = {:ca => "Canada", :us => "United States"}
x[:de] = "Germany"
p x

मैंने इसे निम्नलिखित के साथ लागू करने की कोशिश की है: x['key'] = "value"हालांकि मुझे त्रुटियाँ मिल रही हैं। मुझे उल्लेख करना चाहिए कि मैं तार के साथ काम कर रहा हूं।
टॉम

1
क्या त्रुटि है? यह कुछ भी हो सकता है जब तक कि आप अधिक विशिष्ट न हों।
tadman

1
hash = { a: 'a', b: 'b' }
 => {:a=>"a", :b=>"b"}
hash.merge({ c: 'c', d: 'd' })
 => {:a=>"a", :b=>"b", :c=>"c", :d=>"d"} 

मर्ज किए गए मान को लौटाता है।

hash
 => {:a=>"a", :b=>"b"} 

लेकिन कॉलर ऑब्जेक्ट को संशोधित नहीं करता है

hash = hash.merge({ c: 'c', d: 'd' })
 => {:a=>"a", :b=>"b", :c=>"c", :d=>"d"} 
hash
 => {:a=>"a", :b=>"b", :c=>"c", :d=>"d"} 

पुनर्मूल्यांकन की कोशिश करता है।


0
hash {}
hash[:a] = 'a'
hash[:b] = 'b'
hash = {:a => 'a' , :b = > b}

आपको उपयोगकर्ता इनपुट से अपनी कुंजी और मूल्य मिल सकता है, इसलिए आप रूबी का उपयोग कर सकते हैं ।to_sym एक स्ट्रिंग को प्रतीक में बदल सकते हैं, और .to_i एक स्ट्रिंग को पूर्णांक में बदल देगा।
उदाहरण के लिए:

movies ={}
movie = gets.chomp
rating = gets.chomp
movies[movie.to_sym] = rating.to_int
# movie will convert to a symbol as a key in our hash, and 
# rating will be an integer as a value.

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