如何为Ruby数组执行元素乘法?

时间:2015-04-26 09:46:58

标签: ruby arrays elementwise-operations

课程,学分和分数是相同大小的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)

1 个答案:

答案 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)

即使使用字符串和奇怪的数据,它也适用于我(尽管不兼容的数据只是简单地转换为零,影响数学运算)。