2010-02-21 26 views
9

Estoy teniendo problemas para averiguar la manera elegante de añadir una serie de valores hashsumando los valores de un conjunto de valores hash en Ruby

[{:a=>1,:b=>2,:c=>3},{:a=>1,:b=>2,:c=>3},{:a=>1,:b=>2,:c=>3}] 

deberían volver

[{:a=>3,:b=>6,:c=>9}] 

Sé que probablemente implicaría mapeo/reducción, pero no puedo entender la sintaxis correcta, no ayuda que ruby-doc dot org no coincida con mi versión

Estoy usando 1.8.7

Respuesta

10
array.inject{|x,y| x.merge(y){|_,a,b| a + b}} 

(verificado sobre el Ruby 1.8.7)

+0

Esto está muy bien, aunque no sé por qué la combinación funciona sin inyectar un hash vacío ... – hurikhan77

+0

@ hurikhan77 la primera inyección tiene lugar inicializado con el primer elemento de la matriz - no con un elemento vacío. – Peter

+1

@Peter ¿Qué hace el guión bajo como el primer parámetro de bloque para fusionar? –

Cuestiones relacionadas