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.在这种情况下,无论是a和b包含的关键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)
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)
但它不会保留订单.