LINQ挑战:
我有一个有序的数字列表。假设{2,3,5,7,11}
我喜欢计算每个项目与下一个项目之间的平均值。 使用linq有什么简短的方法吗?
所以这种情况下的结果应该是: {2.5,4,6,9}
答案 0 :(得分:3)
您可以使用Enumerable.Zip
:
List<int> ints = new List<int> { 2, 3, 5, 7, 11 };
IEnumerable<double> averages = ints.Zip(ints.Skip(1), (i1, i2) => (i1 + i2) / 2d);
这会自动拉开列表(从Skip(1)
开始的第二个元素开始)。
结果:2.5 , 4.0, 6.0, 9.0