我有两个哈希...
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
as开头nil + 1
是无效的。
(TL;DR hash1.merge(hash2)
:)
正如大家所说,您可以使用合并方法来解决您的问题。但是,使用合并方法存在一些问题。这就是为什么。
person1 = {"name" => "MarkZuckerberg", "company_name" => "Facebook", "job" => "CEO"}
person2 = {"name" => "BillGates", "company_name" => "Microsoft", "position" => "Chairman"}
看看这两个字段 name 和 company_name。这里的 name 和 company_name 在两个哈希中都是相同的(我的意思是键)。下一份工作和职位有不同的关键。
当您尝试合并两个哈希 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