F#具有元素位置的数组的乘积之和

时间:2014-07-11 17:15:42

标签: arrays f#

来自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.foldArray.iteri以更好的方式解决此问题。

2 个答案:

答案 0 :(得分:4)

您可以使用mapisum

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函数并使用它。