2016-07-29 2 views
0

Ниже приведен код, который я представил для алгоритма суммирования массива. В этом случае мне пришлось использовать .each, но я чувствую, что есть лучший способ сделать это ...Лучший способ решить сумму массива с .each

numbers = [5, 17, 2, 899, 101, 4, 66, 123, 98] 
sum = 0 
index = 0 
numbers.each do |number| 
    sum = sum + numbers[index] 
    index += 1 
end 
puts sum 
+1

Нормальный путь 'numbers.reduce (+)', но так как вы должны использовать 'each', я хотел бы предложить' numbers.each.reduce (+) # => 1315'. –

+0

Я должен уточнить. 'numbers.reduce (: +)' производит тот же результат, что и 'numbers.reduce {| total, n | total + n} '. См. [Enumerable # reduce] (http://ruby-doc.org/core-2.3.0/Enumerable.html#method-i-reduce) (также известный как 'inject'). Было бы преждевременно в вашем рубиновом образовании объяснить, почему это так. Пока, подумайте о первом как коротком способе написания позже. Приемник 'reduce' может быть массивом (' numbers') или перечислителем ('numbers.each'). Так как последний порождает элементы первого, либо можно использовать. Попробуйте запустить 'e = numbers.each' и' e.to_a' в IRB. –

ответ

1

Существует. Вам не нужно отслеживать индекс вручную при использовании each; вы можете просто сделать

numbers.each do |number| 
    sum = sum + number 
end 
Смежные вопросы