如何合并两个哈希数组

Rhs*_*Rhs 7 ruby arrays ruby-hash

我有两个哈希数组:

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

b = [
  {
    key: 1,
    value: "bar"
  },
  {
    key: 1000,
    value: "something"
  }
]
Run Code Online (Sandbox Code Playgroud)

我想将它们合并到一个哈希数组中,所以基本上a + b除了我想要任何重复的键b来覆盖那些a.在这种情况下,无论是ab包含的关键1,我想最终的结果具有b的键值对.

这是预期的结果:

expected = [
  {
    key: 1,
    value: "bar"
  },
  {
    key: 2,
    value: "baz"
  },
  {
    key: 1000,
    value: "something"
  }
]
Run Code Online (Sandbox Code Playgroud)

我得到了它的工作,但我想知道是否有一个不那么冗长的方式这样做:

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
Run Code Online (Sandbox Code Playgroud)

Ste*_*fan 9

uniq 如果你以相反的顺序连接数组将会工作:

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

但它不会保留订单.