Somme de la valeur de tableau de hachage
C'est mon tableau
[{:amount=>10, :gl_acct_id=>1, :alt_amount=>20}, {:amount=>20, :gl_acct_id=>2
, :alt_amount=>30}]
je veux le résultat
[{:amount => 30}] or {:amount = 30}
Une idée?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
inject
de la somme de tous les montants. Vous pouvez ensuite vous suffit de mettre le résultat dans une table de hachage si vous en avez besoin.array.map { |h| h[:amount] }.sum
Ruby versions >= 2.4.0 a un Énumérable#somme méthode. Ainsi, vous pouvez faire
C'est une façon de le faire:
Cependant, j'ai le sentiment que votre modèle d'objet est quelque peu défaut. Avec un meilleur modèle d'objet, vous auriez probablement être en mesure de faire quelque chose comme:
Ou même juste
Noter que, comme @sepp2k souligné, si vous voulez obtenir un
Hash
, vous avez besoin d'envelopper dans unHash
de nouveau.Foo = Struct.new(:amount, :gl_acct_id, :alt_amount); a = [Foo.new(10, 1, 20), Foo.new(20,2,30)]; a.map(&:amount).inject(:+) #=> 30
total = arr.inject(0) {|sum, hash| sum += hash[:amount]}