Подтвердить что ты не робот

Найти среднее значение коллекции TimeSpans

У меня есть коллекция 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());
}
4b9b3361

Ответ 1

Вы можете использовать метод среднего расширения:

double doubleAverageTicks = sourceList.Average(timeSpan => timeSpan.Ticks);
long longAverageTicks = Convert.ToInt64(doubleAverageTicks);

return new TimeSpan(longAverageTicks);

Ответ 2

var average = new TimeSpan(sourceList.Select(ts => ts.Ticks).Average());

Обратите внимание: ваш метод возвращает Nullable, но это не нужно, если вы не хотите возвращать null, если исходный список пуст, в этом случае сначала выполните отдельную проверку.

Ответ 3

В дополнение к вышеприведенному ответу я бы посоветовал вам взять среднее значение на уровне секунд или миллисекунд (в зависимости от того, что вам требуется)

sourceList.Average(timeSpan => timeSpan.ToTalMilliseconds)

Теперь, используя это значение, вы можете перейти на новый интервал времени, используя

TimeSpan avg = TimeSpan.FromMilliseconds(double value here)