如何基于Rails中的哈希键合并哈希数组

我想基于唯一性合并这两个数组:

"template_variables": [{ "info_top": "Some string" }, { "info_bottom": "Other string" }], "user_variables": [{ "info_top": "Default string" }, { "info_bottom": "Other default string" }, { "other_info": "Default number" }] 

因此,如果我从user_variables数组开始并向其添加template_variables ,则替换找到匹配项的哈希值。

我想要的输出是:

 "new_variables": [{ "info_top": "Some string" }, { "info_bottom": "Other string" }, { "other_info": "Default number" }] 

我已经尝试了user_variables.merge(template_variables)及其变体,但这似乎不适合哈希数组。

我该怎么做呢?

 (first_array + second_array).uniq{|hash| hash.keys.first} 

但是你的数据结构太糟糕了。

如果:

 hash = { "template_variables": [{"info_top": "Some string"}, {"info_bottom": "Other string"}], "user_variables": [{"info_top": "Default string"}, {"info_bottom": "Other default string"}, {"other_info": "Default number"}] } 

然后尝试这个:

 values = hash.values.flatten.reverse.inject(&:merge!).map { |k,v| { k => v } } new_hash = {"new_variables": values} 

收益:

 { :new_variables => [{:other_info => "Default number"}, {:info_bottom => "Other string"}, {:info_top => "Some string"}] } 

你可以简单地做一些事情

  kk = {"aa": [{a: 1}, {b: 2}]} jk = {"bb": [{a:3}, {d: 4}]} (kk.values+jk.values).flatten.uniq{|hash| hash.keys.first} 

这与MladenJablanović的post类似