Ich habe ein Array mit ganzen Zahlen.
Zum Beispiel:
array = [123,321,12389]
Gibt es eine gute Möglichkeit, die Summe dieser Werte zu ermitteln?
Ich weiß, dass
sum = 0
array.each { |a| sum+=a }
funktionieren würde.
Ich habe ein Array mit ganzen Zahlen.
Zum Beispiel:
array = [123,321,12389]
Gibt es eine gute Möglichkeit, die Summe dieser Werte zu ermitteln?
Ich weiß, dass
sum = 0
array.each { |a| sum+=a }
funktionieren würde.
Sie können die treffend benannte Methode Enumerable#sum
. Es hat eine Menge Vorteile gegenüber inject(:+)
aber es gibt auch einige wichtige Hinweise am Ende zu lesen.
(1..100).sum
#=> 5050
[1, 2, 4, 9, 2, 3].sum
#=> 21
[1.9, 6.3, 20.3, 49.2].sum
#=> 77.7
Diese Methode ist nicht gleichbedeutend mit #inject(:+)
. Zum Beispiel
%w(a b c).inject(:+)
#=> "abc"
%w(a b c).sum
#=> TypeError: String can't be coerced into Integer
Auch,
(1..1000000000).sum
#=> 500000000500000000 (execution time: less than 1s)
(1..1000000000).inject(:+)
#=> 500000000500000000 (execution time: upwards of a minute)
Siehe diese Antwort für weitere Informationen darüber, warum sum
ist wie folgt.
Ruby 2.4.0 wurde veröffentlicht und hat eine Aufzählbar#sum Methode. Sie können also tun
array.sum
Beispiele aus den Dokumentationen:
{ 1 => 10, 2 => 20 }.sum {|k, v| k * v } #=> 50
(1..10).sum #=> 55
(1..10).sum {|v| v * 2 } #=> 110
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
40 Stimmen
Bitte beachten Sie, dass Ruby 2.4+ die
array.sum
1 Stimmen
Ruby 2.6 hat das nicht. Ruby gibt, Ruby nimmt, so scheint es.
2 Stimmen
@Lori hmm? Link
2 Stimmen
Entschuldigung. Damals glaubte ich fälschlicherweise, ich würde 2.6 verwenden, weil mir ein rbenv-Fehler unterlaufen war.
0 Stimmen
Wenn Sie einen Standardwert angeben müssen, wenn die
Array
leer ist, z. B. wenn Sie eineMoney
Objekt anstelle einesInteger
können Sie etwas tun wiearray.sum( 0.to_money( "USD" ) )
.