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.
Für Ruby >= 2.4 können Sie Summe :
array.sum
Für Ruby < 2.4 können Sie einspeisen. :
array.inject(0, :+)
Anmerkung: Die 0
Basisfall erforderlich ist nil
wird bei leeren Arrays zurückgegeben:
> [].inject(:+)
nil
> [].inject(0, :+)
0
Versuchen Sie dies:
array.inject(0){ |sum, x| sum + x }
Siehe Ruby's Enumerable Dokumentation
(Anmerkung: die 0
Basisfall erforderlich ist, damit 0
wird bei einem leeren Array zurückgegeben, anstatt nil
)
array.reduce(0, :+)
Dies entspricht zwar array.inject(0, :+)
der Begriff reduzieren. wird mit dem Aufkommen von MapReduce-Programmiermodelle .
einspeisen. , reduzieren. , falten , akkumulieren y komprimieren sind alle synonym als eine Klasse von Klappfunktionen . Ich finde Konsistenz in Ihrer Codebasis am wichtigsten, aber da verschiedene Gemeinschaften dazu neigen, ein Wort einem anderen vorzuziehen, ist es dennoch nützlich, die Alternativen zu kennen.
Um das Map-Reduce-Gedöns zu unterstreichen, hier eine Version, die ein wenig nachsichtiger mit dem ist, was in diesem Array landet.
array.map(&:to_i).reduce(0, :+)
Einige weitere relevante Lektüre:
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" ) )
.