2014-01-28 1 views
0

У меня есть 8 транзакций в массиве ruby ​​(@transactions), и каждая транзакция имеет связанное с ними числовое значение, которое мне нужно добавить, чтобы получить один номер, сумму каждого номера транзакции , Как я могу использовать блок кода для добавления чисел вместе? Является ли блок кода лучшим способом для итерации, чтобы получить общее количество?Как добавить в блок кода .each

@transactions.each do | t | 

    # ?? 

end 
+1

В Ruby, как и во многих других вещах, существует много «лучших» способов, каждый из которых зависит от контекста. –

+3

Учитывая транзакцию 't', как вы получаете доступ к своему« значению числа »? – Matt

ответ

4

Рубин на рельсы имеет sum функцию:

@transactions.sum { |t| t.number_value } 

или если вы хотите получить дополнительную краткость

@transactions.sum(:number_value) 
+0

Обратите внимание, что второй способ в этом ответе доступен только «Ruby on Rails», а не рубиновый язык программирования. Но похоже, что вы используете Rails, так что должно быть хорошо :) О, я думаю, вы упомянули «Rails» в начале ответа: p – nzifnab

+0

решил! Спасибо! – user3245766

+0

В Rails последний, несомненно, будет превосходен - он подталкивает сумму в базу данных и возвращает только требуемое значение. Гораздо быстрее и проще. –

2

ли, как показано ниже, используя Enumerable#reduce:

@transactions.reduce(0) { |sum,ob| sum + ob.number_val } 
-1

Попробуйте ниже код. Хотя на этот вопрос можно было ответить задолго до этого. Вы должны как-то задать вопрос Google перед тем, как опубликовать его.

@transaction.inject(0){|sum,x| sum + x.number_value } 
+0

diff между 'reduce' и' inject'? –

+0

@ArupRakshit inject более научный =) –

+0

@ArupRakshit: Они такие же. Различные имена для одного и того же метода. – Saurabh

Смежные вопросы