У меня есть два хэша...
a = {:a => 5}
b = {:b => 10}
Я хочу...
c = {:a => 5,:b => 10}
Как создать хэш c?
У меня есть два хэша...
a = {:a => 5}
b = {:b => 10}
Я хочу...
c = {:a => 5,:b => 10}
Как создать хэш c?
Это довольно простая операция, если вы просто чередуете:
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
недействителен.
Как все говорят, вы можете использовать метод слияния для решения вашей проблемы. Однако есть несколько проблем с использованием метода слияния. Вот почему.
person1 = {"name" => "MarkZuckerberg", "company_name" => "Facebook", "job" => "CEO"}
person2 = {"name" => "BillGates", "company_name" => "Microsoft", "position" => "Chairman"}
Взгляните на эти два имени полей и имя_компании. Здесь имя и имя_компании одинаковы в двух хэшах (я имею в виду клавиши). Следующее задание и позиция имеют разные клавиши.
Когда вы пытаетесь объединить два хэша person1 и person2 Если клавиши person1 и person2 одинаковы? то значение ключа person2 переопределит значение ключа peron1. Здесь второй хеш будет переопределять первые хеш-поля, потому что оба они одинаковы. Здесь имя и название компании одинаковы. См. Результат.
people = person1.merge(person2)
Output: {"name"=>"BillGates", "company_name"=>"Microsoft",
"job"=>"CEO", "position"=>"Chairman"}
Однако, если вы не хотите, чтобы ваш второй хэш перекрывал первый хеш. Вы можете сделать что-то вроде этого
people = person1.merge(person2) {|key, old, new| old}
Output: {"name"=>"MarkZuckerberg", "company_name"=>"Facebook",
"job"=>"CEO", "position"=>"Chairman"}
Это просто краткая заметка при использовании merge()
Я думаю, что вы хотите
c = a.merge(b)
вы можете проверить документы на http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-merge
Использовать метод слияния:
c = a.merge b