如何合并两个哈希并删除多余的元素

时间:2014-09-04 01:43:08

标签: ruby hash merge

我有这个哈希:

a={a: 'a', b: 'b'}

和这个哈希:

b={c: 'c', d: 'd', e: 'e'}

我想合并它们,但由于hash a只包含两个键,我想确保我只保留hash b的两个初始键,所以不要这样:

a.merge b
=> {:a=>"a", :b=>"b", :c=>"c", :d=>"d", :e=>"e"} 

我想要一个看起来像这样的结果:

=> {:a=>"a", :b=>"b", :c=>"c", :d=>"d" } 

所以我保留了b的前两个哈希键,因为a只有两个哈希键。如果a有三个哈希键,那么我们就会保留所有三个b,等等。

文档显示了delete方法,但它强制我指定一个键。我不知道关键是什么,我只想删除多余的元素。

我该如何处理?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

Hash[a.to_a + b.to_a[0...a.length]]
# or 
Hash[a.to_a + b.to_a.take(a.length)]

转到数组,然后按b的长度切片a,最后转为哈希。

答案 1 :(得分:0)

这是另一种方式,假设b中没有a个键:

a = { a: 'a', b: 'b' }
b = { c: 'c', d: 'd', e: 'e' }

keepers = b.keys[0,a.size]
  #=> [:c, :d]
a.merge(b.select { |k,_| keepers.include?(k) })
  #=> {:a=>"a", :b=>"b", :c=>"c", :d=>"d"}

请注意,自Ruby版本1.9以来,哈希只保留了密钥的插入顺序。