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



我有两个哈希...

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

最新更新