查找时间段收集的平均值
我有时间收集,他们代表了花在做任务的时间。 现在我想找出在这个任务上花费的平均时间。 这应该很容易,但由于某种原因我没有得到正确的平均值。
下面是即将做的事情:
private TimeSpan? GetTimeSpanAverage(List<TimeSpan> sourceList) { TimeSpan total = default(TimeSpan); var sortedDates = sourceList.OrderBy(x => x); foreach (var dateTime in sortedDates) { total += dateTime; } return TimeSpan.FromMilliseconds(total.TotalMilliseconds/sortedDates.Count()); }
您可以使用在参数中使用长整型的Average超载 。
double doubleAverageTicks = sourceList.Average(timeSpan => timeSpan.Ticks); long longAverageTicks = Convert.ToInt64(doubleAverageTicks); return new TimeSpan(longAverageTicks);
var average = new TimeSpan(sourceList.Select(ts => ts.Ticks).Average());
注意,你的方法返回一个Nullable ,但是不需要,除非你想在源列表为空的情况下返回null,在这种情况下只需要先做一个单独的检查。
除了上面的答案,我build议你采取平均秒或毫秒级(取决于你所需要的)
sourceList.Average(timeSpan => timeSpan.ToTalMilliseconds)
现在使用这个值,你可以使用新的TimeSpan
TimeSpan avg = TimeSpan.FromMilliseconds(double value here)