Получить средний интервал времени от группы

Мне нужно получить среднее значение TimeSpan из списка сгруппированных объектов, но я не знаю, с чего начать.

Каждый объект в списке имеет свойство типа TimeSpan, и я сгруппировал список по другому свойству. Теперь мне нужно среднее время для каждой группы.

List<Item> Items = new List<Item>();
Item _item1 = new Item { Category = "A", Duration = _someTimeSpan1};
Item _item2 = new Item { Category = "B", Duration = _someTimeSpan2};
Item _item3 = new Item { Category = "A", Duration = _someTimeSpan3};
Items.Add(_item1);
Items.Add(_item2);
Items.Add(_item3);

var _groupedItems = Items.GroupBy(i => i.Category);

В приведенном выше примере _item1 и _item3 сгруппированы по категориям, и мне нужно среднее значение длительности для тех двух элементов, которые находятся в группе.

Любая помощь приветствуется.

3 ответа

Решение
foreach (var group in _groupedItems) {
   var avg = TimeSpan.FromSeconds(group.Average(i => i.Duration.TotalSeconds));
}
var _groupedItems = Items.GroupBy(i => i.Category)
    .Select(g => new { Cat = g.Key, 
    Avg = new TimeSpan(Convert.ToInt64(g.Select(x=>x.Duration.Ticks).Average())) });

Это должно делать свое дело:

foreach (var group in _groupedItems){
    Console.WriteLine(group.Average(g => g.Duration.TotalMilliseconds));
}
Другие вопросы по тегам