Ruby среднее значение массива значений времени (fixnums) - PullRequest
0 голосов
/ 19 октября 2011

Ищем среднюю продолжительность, где продолжительность в форме 1.day, 3.months, 2.weeks format.

# provided array
a = [1.day, 3.days, 1.week, 4.days]

# desired output
a.average = "3 days"

Любой способ, которым я пробовал результаты в рядесекунды являются выходными данными, например:

a.inject(:+) = "15 days"
a.inject(:+) / a.size = 324000

Я смотрел на камень лингвистики, но он выводит значение только в виде числа (триста двадцать четыре тысячи)

Ответы [ 2 ]

3 голосов
/ 19 октября 2011
def average_days(a)
  seconds = a.inject(:+) / a.size
  minutes = seconds / 60
  days    = (minutes / 1440).round
  "#{days} days"
end
1 голос
/ 19 октября 2011
> a = [1.day, 3.days, 1.week, 4.days]
> (a.inject(0.0) {|sum, n| sum + n} / a.size) / (60 * 60 * 24)
 => 3.75 

Если вы настаиваете. Округлить и / или усечь, как вы хотите.

((a.inject(0.0) {|sum, n| sum + n} / a.size) / (60 * 60 * 24)).days
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...