如何合并多个哈希?

ale*_*nco 16 ruby hash

现在,我正在合并这样的两个哈希:

department_hash  = self.parse_department html
super_saver_hash = self.parse_super_saver html

final_hash = department_hash.merge(super_saver_hash)
Run Code Online (Sandbox Code Playgroud)

输出:

{:department => {"Pet Supplies"=> {"Birds"=> 16281,"Cats"=> 245512,"Dogs"=> 513926,"Fish&Aquatic Pets"=> 46811,"Horses"=> 14805 ,"昆虫"=> 364,"爬行动物和两栖动物"=> 5816,"小动物"=> 19769}},:super_saver => {"免费超级救星航运"=> 126649}}

但现在我想在未来合并更多.例如:

department_hash  = self.parse_department html
super_saver_hash = self.parse_super_saver html
categories_hash  = self.parse_categories html
Run Code Online (Sandbox Code Playgroud)

如何合并多个哈希?

pgu*_*rio 25

怎么样:

[department_hash, super_saver_hash, categories_hash].reduce &:merge
Run Code Online (Sandbox Code Playgroud)


Ste*_*fan 16

你可以再打电话merge:

h1 = {foo: :bar}
h2 = {baz: :qux}
h3 = {quux: :garply}

h1.merge(h2).merge(h3)
#=> {:foo=>:bar, :baz=>:qux, :quux=>:garply}
Run Code Online (Sandbox Code Playgroud)


Aru*_*hit 9

你可以使用以下方式Enumerable#inject:

h = {}
arr = [{:a=>"b"},{"c" => 2},{:a=>4,"c"=>"Hi"}]
arr.inject(h,:update)
# => {:a=>4, "c"=>"Hi"}
arr.inject(:update)
# => {:a=>4, "c"=>"Hi"}
Run Code Online (Sandbox Code Playgroud)