哈希散列数组
例如,我有一些单一的哈希
a = [{a: :b}, {c: :d}] 什么是最好的办法将其转换成此?
 {a: :b, c: :d} 
	
你可以使用
 a.reduce Hash.new, :merge 
直接产生
 {:a=>:b, :c=>:d} 
请注意,如果发生碰撞,顺序很重要。 后者散列覆盖以前的映射,请参阅:
 [{a: :b}, {c: :d}, {e: :f, a: :g}].reduce Hash.new, :merge # {:a=>:g, :c=>:d, :e=>:f} 
这两个是相同的:
 total_hash = hs.reduce({}) { |acc_hash, hash| acc_hash.merge(hash) } total_hash = hs.reduce({}, :merge) 
 请注意, Hash#merge在每次迭代中创build一个新的散列,如果您正在构build一个大散列,这可能是一个问题。 在这种情况下,请使用update : 
 total_hash = hs.reduce({}, :update) 
另一种方法是将哈希转换成对,然后构build最终的哈希:
 total_hash = hs.flat_map(&:to_a).to_h 
 你可以使用.inject : 
 a.inject(:merge) #=> {:a=>:b, :c=>:d} 
示范
 它从两个合并的每个迭代启动一个新的散列。 为了避免这种情况,你可以使用破坏性的:merge!  (或:update ,这是一样的): 
 a.inject(:merge!) #=> {:a=>:b, :c=>:d} 
示范
尝试这个
 a.inject({}){|acc, hash| acc.merge(hash)} #=> {:a=>:b, :c=>:d}