Я использую этот код для вычисления среднего некоторых чисел - обратите внимание, что столбец rankings
сериализован и содержит хэш:
@reviews.collect{|review| review.rankings[label].to_i}.sum.to_f/@reviews.length if @reviews.length > 0
Недостаток этого кода заключается в следующем: если одиниз значений nil
, среднее значение вычисляется так, как если бы оно существовало как ноль.В основном проблема в том, что знаменатель @reviews.length
предполагает, что каждый отзыв имеет соответствующее значение.
Как исключить из знаменателя те отзывы, которые не учитываются?
Спасибоочень за ваши ответы.Проблема оказалась в знаменателе, то есть в части /@reviews.length
.Когда я использовал reject
как для числителя, так и для знаменателя, уравнение перестало делиться на общую длину и начало делиться на (длина - нет нуля).
Конечный результат - 2 балла [0 и 100] в среднем до 50;[ноль и 100] в среднем до 100.