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

时间:2012-11-30 23:14:34

标签: ruby hashmap

我有两个哈希......

a = {:a => 5}
b = {:b => 10}

我想......

c = {:a => 5,:b => 10}

如何创建哈希c?

4 个答案:

答案 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)

我想你想要

c = a.merge(b)

您可以在http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-merge

查看文档

答案 3 :(得分:2)

使用合并方法:

c = a.merge b