我有这个哈希:
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
方法,但它强制我指定一个键。我不知道关键是什么,我只想删除多余的元素。
我该如何处理?
答案 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以来,哈希只保留了密钥的插入顺序。