查找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());
}

查找TimeSpans集合的平均值

您可以使用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)