我有一個簡單的串列。每個日期都是任意的,但按時間順序排列。
我想確定日期之間的平均天跨度。
例如:
- 01/01/2022
- 01/02/2022
- 01/04/2022
...應該回傳平均值1.5。(這種情況下的分母是日期之間的時間跨度。在這種情況下,3 個日期之間只有 2 個時間跨度)
因為1在 1/1 和 1/2 之間有2天,在 1/2 和 1/4 之間有天。
(1 day 2 days) / 2 timespans = 1.5 avg
有沒有一種 LINQ 方法可以做到這一點,而不必手動遍歷串列中的每個串列項?
uj5u.com熱心網友回復:
不確定是否有更好的方法,但這是我剛剛放在一起的方法,它似乎對我來說很可靠
var avg = myList.Zip(myList.Skip(1), (dt1, dt2) => dt2 - dt1).Average(dt => dt.Days);
編輯:剛剛檢查了檔案,并且 .Zip 方法不在 .NET 4 之前的版本中
uj5u.com熱心網友回復:
這將只迭代 List 一次:
Enumerable.Range(1, dates.Count() - 1)
.Select(i => (dates[i] - dates[i - 1]).TotalDays)
.Average();
uj5u.com熱心網友回復:
嘗試這個
double aveDays= (days.Last()-days.First()).Days /((double)days.Count-1);
uj5u.com熱心網友回復:
您可以使用Zip和Aggregate來獲得總天數,然后除以Count - 1兩者之間的差距數。
var avg = dates.Zip(dates.Skip(1), (dt1, dt2) => dt2 - dt1)
.Aggregate(0d, (a, dt) => a dt.Days)
/ (dates.Count - 1);
請注意,我使用的0d是因為否則它會導致一個整數 ( 1) 而不是雙精度 ( 1.5)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371742.html
上一篇:使用linq過濾繁瑣的物件串列
