2014-07-08 22 views
9

मैं एक दो हैश की तरह एक ही कुंजी होना चाहिए कि राशि है कि विलय करने के लिए:कैसे दो हैश रूबी में एक ही कुंजी

a = {a: 1, b: 2, c: 3} 
b = {a: 2, b: 3, c: 4} 

और मैं इस तरह प्रत्येक मान योग करना चाहते हैं:

if a.keys == b.keys 
    a.values.zip(b.values).map{|a, b| a+b} 
end 

लेकिन यह कोड काम नहीं करता है अगर कुंजी का क्रम b = {a: 2, c: 4, b: 3} जैसा भिन्न है।

मैं कुंजी के क्रम के बारे में ध्यान में रखते हुए कोड कैसे लिख सकता हूं?

उत्तर

20

उपयोग Hash#merge या Hash#merge!:

a = {a: 1, b: 2, c: 3} 
b = {a: 2, c: 4, b: 3} 
a.merge!(b) { |k, o, n| o + n } 
a # => {:a=>3, :b=>5, :c=>7} 

ब्लॉक प्रमुख, पुराने मूल्य, नए मान के साथ कहा जाता है। और ब्लॉक का वापसी मूल्य एक नए मूल्य के रूप में उपयोग किया जाता है।

+0

मुझे ब्लॉक के साथ #merge पसंद है। अगर मुझे मौका मिलता है, तो मैं इसका इस्तेमाल करता हूं। –

+0

'हैश # विलय!' उर्फ ​​'हैश # अपडेट'। –

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