arrays - 如何合并两个哈希数组

标签 arrays ruby ruby-hash

我有两个哈希数组:

a = [
  {
    key: 1,
    value: "foo"
  },
  {
    key: 2,
    value: "baz"
  }
]

b = [
  {
    key: 1,
    value: "bar"
  },
  {
    key: 1000,
    value: "something"
  }
]

我想将它们合并到一个哈希数组中,所以本质上是 a + b 除了我希望 b 中的任何重复键覆盖 a。在这种情况下,ab 都包含一个键 1,我希望最终结果有 b' s键值对。

这是预期的结果:

expected = [
  {
    key: 1,
    value: "bar"
  },
  {
    key: 2,
    value: "baz"
  },
  {
    key: 1000,
    value: "something"
  }
]

我让它工作了,但我想知道是否有更简洁的方法:

hash_result = {}
a.each do |item|
  hash_result[item[:key]] = item[:value]
end

b.each do |item|
  hash_result[item[:key]] = item[:value]
end

result = []
hash_result.each do |k,v|
  result << {:key => k, :value => v}
end

puts result

puts expected == result # prints true

最佳答案

uniq如果您以相反的顺序连接数组,将会起作用:

(b + a).uniq { |h| h[:key] }
#=> [
#     {:key=>1, :value=>"bar"},
#     {:key=>1000, :value=>"something"},
#     {:key=>2, :value=>"baz"}
#   ]

但它不会保留顺序。

关于arrays - 如何合并两个哈希数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43685628/

相关文章:

ruby-on-rails - 如何对哈希的分层数组进行排序

javascript - 如何比较存储在数组中的单独字符串值的字符? JavaScript

ruby - 使用 RSpec 将类实例加倍的正确方法?

ruby - VIM:Ruby 方法与 ?和 !到底

ruby - Rspec 相等方法

javascript - 使用一些数组元素连接字符串 (Javascript)

javascript - Xpages - 从数组中删除选定的项目

c - 在 C 语言中根据条件或 switch 情况初始化矩阵(二维数组)

arrays - 如果具有该值的散列不存在,则在数组中添加散列,否则扩展现有散列