我有TimeSpans的集合,它们代表完成任务所花费的时间。现在我想找到在该任务上花费的平均时间。它应该很容易,但由于某种原因,我没有得到正确的平均值。
这是我的代码:
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());
}
答案 0 :(得分:88)
您可以使用带有long参数集合的Average overload。
double doubleAverageTicks = sourceList.Average(timeSpan => timeSpan.Ticks);
long longAverageTicks = Convert.ToInt64(doubleAverageTicks);
return new TimeSpan(longAverageTicks);
答案 1 :(得分:12)
var average = new TimeSpan(sourceList.Select(ts => ts.Ticks).Average());
注意,您的方法返回Nullable,但不需要,除非您想要在源列表为空时返回null,在这种情况下,只需先进行单独的检查。
答案 2 :(得分:3)
除上述答案外,我建议您在秒或毫秒级别上取平均值(取决于您的要求)
sourceList.Average(timeSpan => timeSpan.ToTalMilliseconds)
现在使用此值,您可以使用
到达新的TimeSpanTimeSpan avg = TimeSpan.FromMilliseconds(double value here)