44 votes

Sum 2 hachages d'attributs avec la même clé

J'ai 2 hachages, par exemple :

{'a' => 30, 'b' => 14}
{'a' => 4, 'b' => 23, 'c' => 7}

a , b y c sont des objets. Comment puis-je additionner les clés de ces hachages pour obtenir un nouveau hachage comme :

{'a' => 34, 'b' => 37, 'c' => 7}

85voto

Nakilon Points 11635
a_hash = {'a' => 30, 'b' => 14}
b_hash = {'a' => 4, 'b' => 23, 'c' => 7}

a_hash.merge(b_hash){ |k, a_value, b_value| a_value + b_value }
=> {"a"=>34, "b"=>37, "c"=>7}

b_hash.merge(a_hash){ |k, b_value, a_value| a_value + b_value }
=> {"a"=>34, "b"=>37, "c"=>7}

6voto

Rajan Verma Points 319

Si quelqu'un cherche à ajouter plus de 2 hachages, utilisez ceci

#sample array with any number of hashes
sample_arr =  [{:a=>2, :b=>4, :c=>8, :d=>20, :e=>5},
{:a=>1, :b=>2, :c=>4, :d=>10, :e=>5, :r=>7},
{:a=>1, :b=>2, :c=>4, :d=>10},
{:a=>2, :b=>4, :c=>8, :d=>20, :e=>5},
{:a=>1, :b=>2, :c=>4, :d=>10, :e=>5, :r=>7},
{:a=>1, :b=>2, :c=>4, :d=>10}]

sample_arr.inject { |acc, next_obj| acc.merge(next_obj) { |key,arg1,arg2| arg1+agr2 } }`

En cas de hachage hétérogène (contenant à la fois des chaînes et des nombres). Pour ajouter uniquement des entiers.

@resultant_visit_hash = arr.inject { |acc, next_obj| acc.merge(next_obj) { |key,arg1,arg2| arg1+agr2 if (arg1.class == Fixnum && arg2.class == Fixnum) } } 

Le code est explicite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X