मैं दो हैश है में एक और हैश के साथ एक हैश गठबंधन करने के लिए ...कैसे माणिक
a = {:a => 5}
b = {:b => 10}
मैं चाहता हूँ ...
c = {:a => 5,:b => 10}
मैं हैश ग कैसे बनाऊं?
मैं दो हैश है में एक और हैश के साथ एक हैश गठबंधन करने के लिए ...कैसे माणिक
a = {:a => 5}
b = {:b => 10}
मैं चाहता हूँ ...
c = {:a => 5,:b => 10}
मैं हैश ग कैसे बनाऊं?
यह एक सुंदर सीधी-सपाट आपरेशन अगर आप सिर्फ interleaving रहे हैं:
c = a.merge(b)
आप वास्तव में एक साथ मान जोड़ने के लिए चाहते हैं, यह थोड़ा जटिल काम है, लेकिन असंभव नहीं होगा:
c = a.dup
b.each do |k, v|
c[k] ||= 0
c[k] += v
end
a.dup
का कारण a
हैश में मानों को उलझाने से बचने के लिए है, लेकिन यदि आपको परवाह नहीं है तो आप उस भाग को छोड़ सकते हैं। ||=
का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि यह 0
के डिफ़ॉल्ट से शुरू होता है nil + 1
मान्य नहीं है।
उपयोग मर्ज विधि:
c = a.merge b
मुझे लगता है कि आप चाहते हैं
c = a.merge(b)
आप http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-merge
पर डॉक्स की जाँच कर सकते हैं कि हर कोई आप को हल करने के मर्ज विधि का उपयोग कर सकते हैं कह रहा है के रूप में अपने मुसीबत। हालांकि मर्ज विधि का उपयोग करने में कुछ समस्या है। यही कारण है कि।
person1 = {"name" => "MarkZuckerberg", "company_name" => "Facebook", "job" => "CEO"}
person2 = {"name" => "BillGates", "company_name" => "Microsoft", "position" => "Chairman"}
इन दो फ़ील्ड नाम और company_name पर एक नज़र डालें। यहां नाम और company_name दोनों हैंश में हैं (मेरा मतलब चाबियाँ हैं)। अगली नौकरी और स्थिति में अलग-अलग कुंजी हैं।
जब आप दो हैश व्यक्ति 1 और व्यक्ति 2 को मर्ज करने का प्रयास करते हैं यदि व्यक्ति 1 और व्यक्ति 2 कुंजी समान हैं? तो व्यक्ति 2 कुंजी मान peron1 कुंजी मान ओवरराइड करेगा। यहां दूसरा हैश पहले हैश फ़ील्ड को ओवरराइड करेगा क्योंकि दोनों एक जैसे हैं। यहां नाम और कंपनी का नाम समान है। परिणाम देखें।
people = person1.merge(person2)
Output: {"name"=>"BillGates", "company_name"=>"Microsoft",
"job"=>"CEO", "position"=>"Chairman"}
हालांकि यदि आप अपने दूसरे हैश को पहले हैश को ओवरराइड नहीं करना चाहते हैं। 001> hash1 =: आप यह बस एक त्वरित सूचना है जब विलय()
सहित (अधिक) आपके पुनः में विलय की पूर्ण कार्यक्षमता प्रायोजक! :) +1 – Zackkenyon
आप आज के लिए मेरे नायक हैं। मैं इसे बिल्कुल देख रहा था। –
टकराव पर विचार करना महत्वपूर्ण है! लेकिन आपका समाधान 'people = person2.merge (person1)' जैसा ही है, है ना?इस मामले में ब्लॉक अनावश्यक है, लेकिन अगर आप टकराव के लिए कुछ और जटिल करना चाहते हैं तो यह उपयोगी है। यह 'विलय!' (विनाशकारी संस्करण) के लिए भी उपयोगी है। –
बस में आईआरबी – thefonso
1.9.3p194 यह मिल गया का उपयोग कर इस
की तरह कुछ कर सकते हैं {: एक => 5} = > {: a => 5} 1.9.3p194: 002> हैश 2 = {: बी => 10} => {: बी => 10} 1.9.3p194: 003> हैश 3 = हैश 1.मेरगे (हैश 2) => {: ए => 5,: बी => 10} 1.9.3p194: 004> हैश 3 => {: ए => 5,: बी => 10} 1.9.3p194: 005> – thefonso