我正在尝试为方差计算
转换以下代码public static double Variance(this IEnumerable<double> source)
{
double avg = source.Average();
double d = source.Aggregate(0.0,
(total, next) => total += Math.Pow(next - avg, 2));
return d / (source.Count() - 1);
}
在CodeProject上描述了相应的VB.NET lambda表达式语法,但我仍然坚持转换 Aggregate 函数。
如何在VB.NET中实现该代码?
答案 0 :(得分:4)
以下内容仅适用于VB 10.以前的版本不支持多行lambdas。
Dim d = source.Aggregate(0.0,
Function(total, next)
total += (next - avg) ^ 2
Return total
End Function)
Function(foo) bar
对应于C#中的单语句lambda (foo) => bar
,但是你需要这里的多行lambda,它只存在于VB 10之后。
但是,我对原始代码持谨慎态度。修改total
似乎是一个错误,因为没有Aggregate
重载通过引用传递其参数。所以我建议原始代码是错误的(即使它可能实际编译),并且正确的解决方案(在VB中)看起来像这样:
Dim d = source.Aggregate(0.0, _
Function(total, next) total + (next - avg) ^ 2)
此外,这不需要任何多行lambda,因此也适用于旧版本的VB。