web-dev-qa-db-fra.com

Trouver la moyenne de la collection de TimeSpans

J'ai une collection de TimeSpans, ils représentent le temps passé à faire une tâche. J'aimerais maintenant connaître le temps moyen consacré à cette tâche. Cela devrait être facile, mais pour une raison quelconque, je n'obtiens pas la bonne moyenne.

Voici mon code:

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());
}
48
hs2d

Vous pouvez utiliser la méthode d'extension moyenne :

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

return new TimeSpan(longAverageTicks);
90
vc 74
var average = new TimeSpan(sourceList.Select(ts => ts.Ticks).Average());

Remarque, votre méthode renvoie un Nullable , mais ce n'est pas nécessaire, à moins que vous ne souhaitiez retourner null si la liste source est vide, auquel cas effectuez d'abord une vérification séparée.

11
George Duckett

En plus de la réponse ci-dessus, je vous suggère de prendre une moyenne au niveau Secondes ou MilliSecondes (selon ce dont vous avez besoin)

sourceList.Average(timeSpan => timeSpan.ToTalMilliseconds)

Maintenant, en utilisant cette valeur, vous pouvez arriver au nouveau TimeSpan en utilisant

TimeSpan avg = TimeSpan.FromMilliseconds(double value here)
3
V4Vendetta