假设我已经对数字列表进行了排序(按此处未显示的日期):
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 中有一种简单的方法可以做到这一点吗?
最佳答案
我会先计算两个连续数字之间的变化。这可以通过跳过第一项使用相同列表的 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
关于c# - 在 Linq 中比较和分配元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24315286/