我有两个哈希...
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
无效。
(TL;DR: hash1.merge(hash2)
)
正如每个人都说的那样,您可以使用合并方法来解决问题。但是,使用合并方法存在一些问题。原因如下。
person1 = {"name" => "MarkZuckerberg", "company_name" => "Facebook", "job" => "CEO"}
person2 = {"name" => "BillGates", "company_name" => "Microsoft", "position" => "Chairman"}
看看这两个字段名称和company_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)
您可以在 http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-merge 查看文档
使用合并方法:
c = a.merge b