比较和分配Linq中的元素

本文关键字:元素 Linq 分配 比较 | 更新日期: 2023-09-27 18:09:20

假设我已经对一个数字列表进行了排序(按日期排序):

5, 7, 10, 4, 3, 7, 4

我想求增长的平均值,5到7 7到10 3到7等于(2+3+5)/3我还希望从10到4,4到3,7到4的平均值是(6+1+3)/3

是否有一个简单的方法来做到这一点在Linq?

比较和分配Linq中的元素

我会先计算两个连续数字之间的变化。这可以通过跳过第一项来完成同一列表的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