626 Stimmen

Wie summiert man ein Array von Zahlen in Ruby?

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.

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

862voto

jomey Punkte 8529

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

648voto

zenazn Punkte 14115

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 )

305voto

Evan Punkte 7278
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:

118voto

Mike Woodhouse Punkte 50241

Alternativ (nur zum Vergleich), wenn Sie Rails installiert haben (eigentlich nur ActiveSupport):

require 'activesupport'
array.sum

97voto

jrhicks Punkte 14251

Für Ruby >=2.4.0 können Sie verwenden sum von Enumerables.

[1, 2, 3, 4].sum

Es ist gefährlich, Basisklassen mit Mokeypatch zu versehen. Wenn Sie die Gefahr mögen und eine ältere Version von Ruby verwenden, können Sie #sum zum Array Klasse:

class Array
  def sum
    inject(0) { |sum, x| sum + x }
  end
end

CodeJaeger.com

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.

Powered by:

X