【发布时间】:2013-10-09 18:51:07
【问题描述】:
我的Array 类中有以下方法:
class Array
def avg
if partial_include?(":")
avg_times
else
blank? and 0.0 or (sum.to_f/size).round(2)
end
end
def avg_times
avg_minutes = self.map do |x|
hour, minute = x.split(':')
total_minutes = hour.to_i * 60 + minute.to_i
end.inject(:+)/size
"#{avg_minutes/60}:#{avg_minutes%60}"
end
def partial_include?(search_term)
self.each do |e|
return true if e[search_term]
end
return false
end
end
这对常规数字数组非常有效,但在某些情况下我可能有一个时间数组。
例如:[18:35, 19:07, 23:09]
要算出时间对象数组的平均值吗?
【问题讨论】:
-
该格式的字符串还是日期时间对象?
-
您可以致电
to_i并获得总和和除数。如果你先减去一个偏移量会更快,这样你就不用Bignums -
它们是否曾经混合过,或者总是数字或时间,从不两者兼而有之?
-
@hirolau - 它们是字符串
-
现在的代码可以用 self.first[':'] 替换 partial_include?(":") 然后删除 partial_include?方法。
标签: ruby-on-rails ruby arrays