2012-02-10 21 views
7

मैं पहले से ही एक मान का उपयोग कर हैश ऑब्जेक्ट में एक मान कैसे जोड़ सकता हूं। इसलिए उदाहरण के के लिए अगर मैंपहले से मौजूद कुंजी का उपयोग कर, हैश ऑब्जेक्ट (रूबी में) में एक मान संलग्न करें?

>> my_hash = Hash.new 
>> my_hash[:my_key] = "Value1" 
# then append a value, lets say "Value2" to my hash, using that same key "my_key" 
# so that it can be 
>> my_hash[:my_key] 
=> ["Value1", "Value2"] 

मैं अपने ही विधि लिखने के लिए अपनी आसान पता है, लेकिन मैं सिर्फ अगर वहाँ एक विधि में बनाया जानना चाहता था।

उत्तर

9

मैं अगर मैं अपनी बात याद कर रहा हूँ पता नहीं है, लेकिन आप निम्नलिखित माना जाता है: अगर मैं सही ढंग से याद करते हैं

1.9.3 (main):0 > h={} 
=> {} 
1.9.3 (main):0 > h[:key] = [] 
=> [] 
1.9.3 (main):0 > h[:key] << "value1" 
=> ["value1"] 
1.9.3 (main):0 > h[:key] << "value2" 
=> ["value1", "value2"] 
1.9.3 (main):0 > h[:key] 
=> ["value1", "value2"] 
+0

ओह ठीक है ... तो मूल रूप से मैं सिर्फ हैश के अंदर एक सरणी का उपयोग कर रहा हूं ... क्या हुआ था जब मैंने एच करने की कोशिश की [: key] << "value2" h बाहर करने के साथ [: key] = [], और यह तारों को संयोजित करता है और "value1value2" लौटाता है, इसलिए मुझे लगता है कि मुझे स्पष्ट रूप से एक सरणी बनाना है .. धन्यवाद – bernabas

+0

@bernabasd स्वागत से अधिक! 'Hash # new' पर एक ब्लॉक पास करने के लिए – lucapette

9

रूबी मार्ग, 2 संस्करण बहु मूल्य हैश पर एक पूरा अध्याय है। भले ही, इस व्यवहार के लिए कोई अंतर्निहित नहीं है।

हालांकि, आप Hash.new में ब्लॉक को पास करने के साथ कुछ मजा ले सकते हैं।

$ irb 
>> h = Hash.new { |hash, key| hash[key] = [] } 
=> {} 
>> h[:a] << "Value1" 
=> ["Value1"] 
>> h[:a] << "Value2" 
=> ["Value1", "Value2"] 
>> h 
=> {:a=>["Value1", "Value2"]} 
>> 

आप []= हमेशा मूल्य में जोड़ने के लिए चाहते हैं, तो आप बंदर पैच की आवश्यकता होगी। फिर, इस तरह काम करने के लिए कुछ भी नहीं बनाया गया।

+1

+1। इसे प्यार करना! – lucapette

संबंधित मुद्दे