[英]F# Sum of products of an array with element position
具有C#背景并尝试学习F#。
我试图遍历一个大小为256的数组,所以它的总和是元素位置和元素的乘积,如下所示:
float sum = 0.0;
for (int i = 0; i < 256; i++) {
sum += i * arr[i];
}
我做了这个,但是我不知道这是否是在F#中最好的方法,也许不是。
let mutable sum = 0
for i in 0 .. 255 do
sum <- sum + i * arr.[i]
done
我不知道是否可以使用Array.fold
或Array.iteri
以更好的方式解决此问题。
您可以使用mapi
和sum
:
let f s = s |> Seq.mapi (fun i j -> i * j) |> Seq.sum
一种仅通过数组迭代一次的方式:
let f s = snd (Array.fold (fun (i, sum) x -> (i + 1, sum + x * float i)) (0, 0.0) s)
尽管我更喜欢Lee的解决方案,因为它易于遵循。
一种替代方法是编写您自己的Array.foldi函数并使用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.