【问题标题】:How to merge arrays of hashes based on keys of hashes in Rails如何根据Rails中的哈希键合并哈希数组
【发布时间】:2016-07-14 07:47:09
【问题描述】:

我想根据唯一性合并这两个数组:

"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) 及其变体,但这似乎不适用于哈希数组。

我该怎么做?

【问题讨论】:

  • 上述示例的期望输出是什么?
  • template_variables 数组和user_variables 数组中的值是否总是带有单个键的哈希?或者你能得到这样的东西:"template_variables" : [{var1: 'some str', var2: 'str in same has as var1'}, {var3: '3rd str in a different hash'}]
  • 就像@RSB 所说,请添加所需的输出。另外,请向我们提供您的解决方案(或至少是您的练习)的样子。
  • 谢谢,我更新了问题。
  • @br3nt 它们的结构总是相同的。

标签: ruby-on-rails arrays ruby hash


【解决方案1】:
(first_array + second_array).uniq{|hash| hash.keys.first}

但是你的数据结构很烂。

【讨论】:

  • 介意解释一下原因吗?另外,您的回答对我不起作用。
  • 一个 n 个单元素散列数组,全部具有不同的键,而不是具有 n 个元素的单个散列。另外,究竟什么不起作用?你得到什么结果?
  • 这篇文章已经大大简化了,但是是的,我明白你的意思,谢谢。尽管您的代码只是返回两个哈希值而没有任何覆盖。
  • 我会接受你的回答,因为你对我帮助最大。我最终清理了数据结构并在其上使用了merge
【解决方案2】:

如果:

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"}]
}

【讨论】:

    【解决方案3】:

    你可以简单地做类似的事情

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

    类似于 Mladen Jablanović 的帖子

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 2016-05-29
      • 1970-01-01
      • 2016-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多