我有两个哈希数组:
a = [
{
key: 1,
value: "foo"
},
{
key: 2,
value: "baz"
}
]
b = [
{
key: 1,
value: "bar"
},
{
key: 1000,
value: "something"
}
]
我想将它们合并到一个哈希数组中,所以本质上是 a + b
除了我希望 b
中的任何重复键覆盖 a
。在这种情况下,a
和 b
都包含一个键 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/