我有两个哈希......
a = {:a => 5}
b = {:b => 10}
我想......
c = {:a => 5,:b => 10}
如何创建哈希c?
答案 0 :(得分:63)
如果你只是交错,这是一个非常简单的操作:
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
无效。
答案 1 :(得分:20)
正如大家所说,你可以使用合并方法来解决你的问题。但是使用merge方法稍有问题。这就是原因。
person1 = {"name" => "MarkZuckerberg", "company_name" => "Facebook", "job" => "CEO"}
person2 = {"name" => "BillGates", "company_name" => "Microsoft", "position" => "Chairman"}
看看这两个字段名称和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()
时只是一个简单的注释答案 2 :(得分:7)
答案 3 :(得分:2)
使用合并方法:
c = a.merge b