假设我已经(按照此处未显示的日期)排序了一个数字列表:
5, 7, 10, 4, 3, 7, 4
Run Code Online (Sandbox Code Playgroud)
我想得到平均增加,所以5到7然后7到10和3到7是(2 + 3 + 5)/ 3我也想要平均减少10到4,4到3和7到4是(6 + 1 + 3)/ 3
在Linq有一个简单的方法吗?
Ser*_*kiy 15
我会先计算两个连续数字之间的变化.这可以Enumerable.Zip通过跳过第一项来完成相同的列表.然后,您可以获得正在向上移动的更改或正在向下移动的更改并计算其平均值:
var changes = list.Zip(list.Skip(1), (x,y) => y-x); // [ 2, 3, -6, -1, 4, -3 ]
var averageUp = changes.Where(x => x > 0).Average(); // 3
var averageDown = changes.Where(x => x < 0).Average(); // -3.33
Run Code Online (Sandbox Code Playgroud)