Вы получаете ошибку, потому что array1.each
пытается получить доступ к array3['d1']
, который еще не существует, поэтому он возвращает nil
в качестве значения. Вам просто нужно определить array3
чуть более конкретно, используя Hash.new
, чтобы сказать ему назначить 0
всем клавишам по умолчанию.
array3 = Hash.new(0)
array1.each {|key, count| array3[key] += count}
array2.each {|key, count| array3[key] += count}
Будьте осторожны, продвигаясь вперед: объект, который вы передаете в качестве значения по умолчанию, может быть изменен, поэтому, если вы напишите my_hash = Hash.new(Array.new); my_hash[:some_key] << 3
, тогда все ключи , получающие значение по умолчанию, будут использовать один и тот же объект , Это одна из тех странных ошибок в Ruby, и вы хотели бы использовать блочную версию Hash.new
в этом случае.