繁体   English   中英

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

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

您可以使用mapisum

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM