ハッシュが2つあります...
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
as nil + 1
有効ではない。
みんなが言っているように、あなたはあなたの問題を解決するためにマージ方法を使うことができます。ただし、マージ方法の使用には若干の問題があります。その理由は次のとおりです。
person1 = {"name" => "MarkZuckerberg", "company_name" => "Facebook", "job" => "CEO"}
person2 = {"name" => "BillGates", "company_name" => "Microsoft", "position" => "Chairman"}
これら2つのフィールドの名前とcompany_nameを見てください。ここで、nameとcompany_nameは両方とも2つのハッシュで同じです(キーを意味します)。次の仕事と役職には異なるキーがあります。
2つのハッシュperson1とperson2をマージしようとすると、person1とperson2のキーが同じ場合次に、person2キー値がperon1キー値をオーバーライドします。ここでは、両方が同じであるため、2番目のハッシュが最初のハッシュフィールドをオーバーライドします。ここで、名前と会社名は同じです。結果をご覧ください。
people = person1.merge(person2)
Output: {"name"=>"BillGates", "company_name"=>"Microsoft",
"job"=>"CEO", "position"=>"Chairman"}
ただし、2番目のハッシュで最初のハッシュを上書きしたくない場合。このようなことができます
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