c# - generate - Encuentra el promedio de la colección de TimeSpans
params comments c# (3)
Tengo una colección de TimeSpans, representan el tiempo empleado en hacer una tarea. Ahora me gustaría encontrar el tiempo promedio dedicado a esa tarea. Debería ser fácil, pero por alguna razón no obtengo el promedio correcto.
Aquí está mi código:
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());
}
Además de la respuesta anterior, le sugiero que tome un promedio en el nivel de Segundos o MilliSegundos (dependiendo de lo que necesite)
sourceList.Average(timeSpan => timeSpan.ToTalMilliseconds)
Ahora usando este valor podrías llegar al nuevo TimeSpan usando
TimeSpan avg = TimeSpan.FromMilliseconds(double value here)
Puede usar la sobrecarga promedio que toma una colección de long en el parámetro.
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());
Tenga en cuenta que su método devuelve un valor Nullable , pero no es necesario, a menos que desee devolver el valor nulo si la lista de origen está vacía, en cuyo caso haga primero una comprobación por separado.