我有一列具有双值。我必须计算列中所有值的每个值之间差异的平均值。
例如:对于 1、2、3.5,平均值为:( (2-1) + (3.5-2) ) / 2
有没有一种 linq 方法或另一种聪明的方法?
我有一列具有双值。我必须计算列中所有值的每个值之间差异的平均值。
例如:对于 1、2、3.5,平均值为:( (2-1) + (3.5-2) ) / 2
有没有一种 linq 方法或另一种聪明的方法?
如果你有一个数组(或列表,或任何其他类似的集合)中的值,你可以这样做:
double[] values = new[] { 1.0, 2.0, 3.5 };
var averageDifference = Enumerable
.Range(0, values.Length - 1)
.Select(i => values[i + 1] - values[i])
.Average();
如果这些值不在类似数组的集合中,您可以使用 Jon Skeet 的答案。或者,您可能想创建自己的扩展方法;像这样的东西应该工作:
public static IEnumerable<TResult> SelectAdjacentPairs<TSource, TResult>(
this IEnumerable<TSource> source,
Func<TSource, TSource, TResult> resultSelector)
{
using (var enumerator = source.GetEnumerator())
{
if (enumerator.MoveNext())
{
TSource prev = enumerator.Current;
while (enumerator.MoveNext())
{
yield return resultSelector(prev, enumerator.Current);
prev = enumerator.Current;
}
}
}
}
并称它为:
var averageDifference = values.SelectAdjacentPairs((x, y) => y - x).Average();
此方法不需要像使用我的第一种方法那样对项目进行按索引访问,也不需要像使用Zip
.