Rails将哈希数组映射到单个哈希

我有这样的散列数组:

[{"testPARAM1"=>"testVAL1"}, {"testPARAM2"=>"testVAL2"}] 

我试图把这个映射到单个哈希像这样:

 {"testPARAM2"=>"testVAL2", "testPARAM1"=>"testVAL1"} 

我已经实现了使用

  par={} mitem["params"].each { |h| h.each {|k,v| par[k]=v} } 

但我想知道是否有可能以更习惯的方式做到这一点(最好不使用局部variables)。

我怎样才能做到这一点?

你可以编写Enumerable#reduceHash#merge来完成你想要的。

 input = [{"testPARAM1"=>"testVAL1"}, {"testPARAM2"=>"testVAL2"}] input.reduce({}, :merge) is {"testPARAM2"=>"testVAL2", "testPARAM1"=>"testVAL1"} 

减less数组的sorting就像在每个元素之间粘贴一个方法调用。

例如[1, 2, 3].reduce(0, :+)就像是说0 + 1 + 2 + 3并给出6

在我们的例子中,我们做了类似的事情,但是使用合并两个散列的合并函数。

 [{:a => 1}, {:b => 2}, {:c => 3}].reduce({}, :merge) is {}.merge({:a => 1}.merge({:b => 2}.merge({:c => 3}))) is {:a => 1, :b => 2, :c => 3} 

怎么样:

 h = [{"testPARAM1"=>"testVAL1"}, {"testPARAM2"=>"testVAL2"}] r = h.inject(:merge) 

使用#inject

 hashes = [{"testPARAM1"=>"testVAL1"}, {"testPARAM2"=>"testVAL2"}] merged = hashes.inject({}) { |aggregate, hash| aggregate.merge hash } merged # => {"testPARAM1"=>"testVAL1", "testPARAM2"=>"testVAL2"}