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.
Ermöglicht auch [1,2].sum{|x| x * 2 } == 6
:
# http://madeofcode.com/posts/74-ruby-core-extension-array-sum
class Array
def sum(method = nil, &block)
if block_given?
raise ArgumentError, "You cannot pass a block and a method!" if method
inject(0) { |sum, i| sum + yield(i) }
elsif method
inject(0) { |sum, i| sum + i.send(method) }
else
inject(0) { |sum, i| sum + i }
end
end
end
Methode 1:
[1] pry(main)> [1,2,3,4].sum
=> 10
[2] pry(main)> [].sum
=> 0
[3] pry(main)> [1,2,3,5,nil].sum
TypeError: nil can't be coerced into Integer
Methode 2:
[24] pry(main)> [].inject(:+)
=> nil
[25] pry(main)> [].inject(0, :+)
=> 0
[4] pry(main)> [1,2,3,4,5].inject(0, :+)
=> 15
[5] pry(main)> [1,2,3,4,nil].inject(0, :+)
TypeError: nil can't be coerced into Integer
from (pry):5:in `+'
Methode 3:
[6] pry(main)> [1,2,3].reduce(:+)
=> 6
[9] pry(main)> [].reduce(:+)
=> nil
[7] pry(main)> [1,2,nil].reduce(:+)
TypeError: nil can't be coerced into Integer
from (pry):7:in `+'
Methode 4: Wenn Array eine Null und leere Werte enthält, wird standardmäßig, wenn Sie eine der oben genannten Funktionen reduce, sum, inject verwenden, alles durch den
TypeError: nil kann nicht in Integer umgewandelt werden
Sie können dies überwinden, indem Sie,
[16] pry(main)> sum = 0
=> 0
[17] pry(main)> [1,2,3,4,nil, ''].each{|a| sum+= a.to_i }
=> [1, 2, 3, 4, nil, ""]
[18] pry(main)> sum
=> 10
Methode 6: eval
Wertet den/die Ruby-Ausdruck(e) in String aus.
[26] pry(main)> a = [1,3,4,5]
=> [1, 3, 4, 5]
[27] pry(main)> eval a.join '+'
=> 13
[30] pry(main)> a = [1,3,4,5, nil]
=> [1, 3, 4, 5, nil]
[31] pry(main)> eval a.join '+'
SyntaxError: (eval):1: syntax error, unexpected end-of-input
1+3+4+5+
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" ) )
.