来自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
以更好的方式解决此问题。
答案 0 :(得分:4)
您可以使用mapi
和sum
:
let f s = s |> Seq.mapi (fun i j -> i * j) |> Seq.sum
答案 1 :(得分:0)
通过数组只进行一次迭代的一种方法:
let f s = snd (Array.fold (fun (i, sum) x -> (i + 1, sum + x * float i)) (0, 0.0) s)
虽然我更喜欢李的解决方案,但更容易理解。
另一种方法是编写自己的Array.foldi函数并使用它。