查找TimeSpans集合的平均值
本文关键字:平均值 集合 TimeSpans 查找 | 更新日期: 2023-09-27 18:20:15
我有一组TimeSpan,它们表示完成任务所花费的时间。现在我想找出在这项任务上花费的平均时间。这应该很容易,但由于某种原因,我没有得到正确的平均值。
这是我的代码:
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重载,该重载占用参数中的long的集合
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,在这种情况下,只需先进行单独的检查。
除了上面的答案外,我建议你取秒或毫秒级别的平均值(取决于你的要求)
sourceList.Average(timeSpan => timeSpan.ToTalMilliseconds)
现在使用这个值,您可以使用获得新的TimeSpan
TimeSpan avg = TimeSpan.FromMilliseconds(double value here)