2014-09-04 65 views
1

我有这个散列:如何合并两个散列,并删除多余的元素

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

这个散列:

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

我想将它们合并,但由于哈希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方法,但它迫使我指定一个键。我不知道关键是什么,我只是想删除多余的元素。

我该如何解决这个问题?

回答

1

你可以这样做:

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

转到阵列然后切片b通过a的长度,转向哈希最后。

+0

@oldergod好多了。 – xdazz 2014-09-04 02:02:51

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是哈希值一直保持按键的插入顺序。