2015-04-26 3 views
1

Курсы, кредиты и баллы - это массивы Ruby с равным размером.Как я могу выполнить умножение по элементам для массивов Ruby?

gpa = (([credits, courses, points].transpose.map {|x| x.reduce(:*)}).inject{|sum,x| sum + x }).round(2) 

Этот метод вызвал сообщение об ошибке, когда я пытался его запустить.

Сообщение об ошибке:

in 'each': undefined method '*' for nil:NilClass (NoMethodError) 
+2

Выглядит хорошо для меня. (кстати, «приведение» и «сокращение» являются синонимами, для ясности используйте один или другой, но не оба). ** Проблема в ваших данных ** – jazzytomato

+0

никаких ошибок для меня. –

+0

, пожалуйста, поместите массивы, если это возможно. –

ответ

1

Из сообщения об ошибке, кажется, что некоторые из данных nil.

Возможно, вы можете попытаться заставить данные поплавки.

Это не идеальный вариант, так как вы можете получить бесшумные ошибки, но это стоит того.

попробовать:

[credits, courses, points].transpose.map {|a| a.map {|n| n.to_f} } .map { |x| x.reduce(:*) } .inject{|sum, x| sum + x} .round(2) 

Это работает для меня, даже со строками и странные данные (хотя несовместимые данные просто преобразуются в нули, производя математику).

+0

Спасибо, я нашел ошибку. Это фактически вызвано некоторыми недопустимыми данными. –

+0

@JohnsonYeap Ваш прием. Я рад, что вы нашли ошибку. Удачи вам в кодировании. – Myst