如何基于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类似