2013-06-06 3 views
1

Помогите, я студент Ruby, я знаю, как сделать метод .sum, но не это: Как вы определяете функцию sum для массива, так что предоставление любых элементов приведет к их сумма. Формат должен быть суммой ([входы массива]) возвращать сумму элементов массива. Для ex: sum ([]) должен возвращать 0, sum ([1,2,3]) возвращает 6 (#again, а не [1,2,3] .sum). Я так застрял в коробке, большое спасибо за любую помощь.Определите функцию суммы в Ruby

+0

Ищите источник 'Array # sum' :) –

+0

Какой метод' sum' вы знаете? Вы упоминаете Rails? – sawa

ответ

2

Решение с использованием Enumerable#inject:

def sum(array) 
    array.inject(0){|sum, el| sum + el} 
end 

Или, как это было предложено, более короткий и более элегантный вид:

def sum(array) 
    array.inject(0, :+) 
end 
+0

ничего себе ... ты потрясающий, он работает как шарм. Большое спасибо. –

+3

или 'array.inject (0,: +)'. – tokland

+0

или 'array.sum' - см. Ответ от NikDP – ovhaag

0
def sum(arr) 
sum = 0 
arr.each{|element| sum=sum+element } 
return sum 
end 
+0

Несмотря на то, что это работает, поэтому императивный способ делать вещи не является идиоматическим в Ruby (и что' return' определенно ** не ** идиоматичен). – tokland

+0

Большое спасибо, это больше моего уровня :) –

+0

welcome Kim Jong II :) – bunty

1

Это будет делать:

def sum(array) 
    array.reduce(0, :+) 
end 
+0

Большое спасибо! –

+1

На самом деле вам не нужно '0'. Вы можете сделать 'array.reduce (: +)'. – sawa

+0

@sawa '[] .reduce (: +) # => nil' – toro2k

1

Использование метод суммы массива.

arr = [1,2,3] 
arr.sum 


def sum(arr) 
    arr.sum 
end 
Смежные вопросы