2012-06-23 30 views
11

Bunu yapmaktan bahsedecek bir yer bulamıyorum.ruby ​​hash değerini değerlerle birlikte başka bir hash ile birleştirmek

Ben karma {"23"=>[0,3]} var ki ve ben {"23"=>[0,3]}

Teşekkür almak için yaklaşık {"23"=>[3]}{"23"=>0} ile birleşti bu karma {"23"=>[0,2,3]}

Veya nasıl sonuçlanacağını için bu karma {"23"=>[2,3]} içinde birleştirmek istiyorum! dizi olmayan değerlerini işlemek için

+0

Peki, ne denediniz *? Neyse, 'enjekte' mi baktı? Daha zekice bir zip-by-yaklaşım olabilir, ancak ... –

+0

@pst: Ya da daha iyisi, 'azaltmak'? :) –

+0

@SergioTulentsev Ya da bir şey :-) –

cevap

23
{"23"=>[0,3]}.merge({"23"=>[2,3]}){ |key,oldval,newval| oldval | newval } 
#=> {"23"=>[0, 3, 2]} 

Daha genel yolu: Marc-André LaFortune en ipucu ile Güncelleme

{"23"=>[0,3]}.merge({"23"=>[2,3]}) do |key, oldval, newval| 
    (newval.is_a?(Array) ? (oldval + newval) : (oldval << newval)).uniq 
end 

.

+2

Birleştirme, bir blok alabilirdi bilmiyordum. Tatlı! –

+0

Bu harika. Mükemmel çalışıyor! Mega için + 1! Teşekkürler! – bfcoder

+4

Daha iyi, daha kısa, daha hızlı kullanmak 'eskival | newval' sonra '' (oldval + newval) .uniq' –