On Jan 28, 2009, at 2:31 PM, Tim Hunter wrote:

> Bryson Smith wrote:
>> Hi,
>>
>> I'm wondering if it is possible to "add" the values of two hashes
>> together.  Suppose I had:
>>
>> hash1 = {:key_one=>100, :key_two=>200}
>> hash2 = {:key_two=>300, :key_three=>400}
>>
>> I'd like to "add" the hashes together so that I get
>>
>> result => {:key_one=>100, :key_two=>500, :key_three=>400}
>>
>> Do I need to write my own function to parse through each hash's keys?
>> Is there a built-in way to do this?
>>
>> Thanks!
>
> No built-in way, but it would be easy to use hash1.each_key to iterate
> over the keys of hash1. For every key in hash1, get its value for that
> key from hash1 and hash2, add the two values and store the sum as the
> value of that key in result.
>
> The question is, what happens if there's a key in hash1 that isn't in
> hash2, or vice versa?

In case it was missed the first time:

irb> result = hash1.merge(hash2) {|key,val1,val2| val1+val2}
=> {:key_two=>500, :key_three=>400, :key_one=>100}

You only have to write the block that deals with the duplicates for  
'key'

-Rob

Rob Biedenharn		http://agileconsultingllc.com
Rob / AgileConsultingLLC.com