2014-09-04 116 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是哈希值一直保持按鍵的插入順序。