我有一个简单的
List<DateTime>
。每个日期都是任意的,但按时间顺序排列。
我想确定日期之间的平均日跨度。
例如:
...应返回平均值
1.5
。 (本例中的分母是日期之间的时间跨度。在本例中,3 个日期之间只有 2 个时间跨度)
因为 1/1 到 1/2 之间有
1
天,1/2 到 1/4 之间有 2
天。
(1 day + 2 days) / 2 timespans = 1.5 avg
是否有 LINQ 方法可以执行此操作,而无需手动迭代列表中的每个列表项?
不确定是否有更好的方法,但这是我刚刚组合在一起的方法,它似乎对我来说可靠地工作
var avg = myList.Zip(myList.Skip(1), (dt1, dt2) => dt2 - dt1).Average(dt => dt.Days);
编辑:刚刚检查了文档,.Zip 方法不在 .NET 4 之前的版本中
这只会迭代列表一次:
Enumerable.Range(1, dates.Count() - 1)
.Select(i => (dates[i] - dates[i - 1]).TotalDays)
.Average();
试试这个
double aveDays= (days.Last()-days.First()).Days /((double)days.Count-1);