Я бы использовал цикл, но просто для удовольствия:
IEnumerable<TimeSpan> AverageClumps(Queue<TimeSpan> lots, int clumpSize)
{
while (lots.Any())
{
var portion = Math.Min(clumpSize, lots.Count);
yield return Enumerable.Range(1, portion).Aggregate(TimeSpan.Zero,
(t, x) => t.Add(lots.Dequeue()),
(t) => new TimeSpan(t.Ticks / portion));
}
}
}
Это проверяет каждый элемент только один раз, поэтому производительность намного лучше, чем у других предложений LINQ. К сожалению, он изменяет очередь, но, возможно, это особенность, а не ошибка?
Он имеет приятный бонус итератора, поэтому он дает вам средние значения по одному за раз.