我有两个哈希......
a = {:a => 5}
b = {:b => 10}
Run Code Online (Sandbox Code Playgroud)
我想要...
c = {:a => 5,:b => 10}
Run Code Online (Sandbox Code Playgroud)
如何创建哈希c?
tad*_*man 66
如果你只是交错,这是一个非常简单的操作:
c = a.merge(b)
Run Code Online (Sandbox Code Playgroud)
如果你想将这些值实际添加到一起,这将会有点棘手,但并非不可能:
c = a.dup
b.each do |k, v|
c[k] ||= 0
c[k] += v
end
Run Code Online (Sandbox Code Playgroud)
原因a.dup
是为了避免破坏a
散列中的值,但如果你不在乎你可以跳过那一部分.将||=
用于确保它的默认启动0
为nil + 1
无效.
Pra*_*thi 22
正如大家所说,你可以使用合并方法来解决你的问题.但是使用merge方法稍有问题.这就是原因.
person1 = {"name" => "MarkZuckerberg", "company_name" => "Facebook", "job" => "CEO"}
person2 = {"name" => "BillGates", "company_name" => "Microsoft", "position" => "Chairman"}
Run Code Online (Sandbox Code Playgroud)
看看这两个字段名称和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"}
Run Code Online (Sandbox Code Playgroud)
但是,如果您不希望第二个哈希覆盖第一个哈希.你可以做这样的事情
people = person1.merge(person2) {|key, old, new| old}
Output: {"name"=>"MarkZuckerberg", "company_name"=>"Facebook",
"job"=>"CEO", "position"=>"Chairman"}
Run Code Online (Sandbox Code Playgroud)
使用merge()时只是一个快速说明
我想你想要的
c = a.merge(b)
Run Code Online (Sandbox Code Playgroud)
你可以查看http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-merge上的文档.
归档时间: |
|
查看次数: |
44601 次 |
最近记录: |