Я думаю, что метод Ruby's inject
действительно опрятен для расчета сумм. Но если я должен вычислить среднее и использовать inject
, я всегда в конечном итоге с чем-то вроде этого:Как рассчитать средние значения с использованием функции Ruby Inject
total_ranked_query_results = @results.count { |result| result.class == RankedQueryResult }
@results.inject(0.0) { |sum, result| result.class == RankedResult ? sum + result.average_precision : sum }/total_ranked_query_results
Так что в основном приходится повторять два раза, чтобы узнать, сколько RankedResults
есть для того, чтобы вычислить среднее значение.
Есть ли лучший (рубический) способ избежать этого?
В первом примере tmp.last вычисляется неправильно, он должен быть увеличен только когда результат RankedResult – Tonttu
спасибо, исправлено :-) – arnaud576875