如何在ruby中将一个哈希与另一个哈希组合

如何在ruby中将一个哈希与另一个哈希组合,ruby,hashmap,Ruby,Hashmap,我有两个哈希 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散列中的值,但如果您不介意,可以跳过该部分。| |=

我有两个哈希

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
无效。

使用合并方法:

c = a.merge b
我想你想要

c = a.merge(b)
您可以在

(TL;DR:
hash1.merge(hash2)
)上查看文档

正如大家所说,您可以使用合并方法来解决您的问题。但是,使用merge方法有一些小问题。这就是原因

person1 = {"name" => "MarkZuckerberg",  "company_name" => "Facebook", "job" => "CEO"}

person2 = {"name" => "BillGates",  "company_name" => "Microsoft", "position" => "Chairman"}
看看这两个字段name和company\u 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()时,这只是一个简短的提示。

1.9.3p194:001>hash1={:a=>5}=>1.9.3p194:002>hash2={:b=>10}=>1.9.3p194:003>hash3=hash1.merge(hash2)=>5,:b=>10}1.9.3p194:004>hash3=>10}在您的响应中完成合并功能!:)+你是我今天的英雄。我一直在寻找,碰撞是很重要的。但是您的解决方案与
people=person2.merge(person1)
相同,对吗?在这种情况下,该块是不必要的,但如果您想对碰撞执行更复杂的操作,则该块非常有用。它对于
合并也很有用(破坏性版本)。TL奖金;博士