【发布时间】:2011-02-01 06:56:32
【问题描述】:
您如何使以下代码以相同的速度运行?一般来说,作为输入,我有一个包含位置坐标和其他内容的对象列表,我需要创建一个包含这些对象的二维数组。
let m = Matrix.Generic.create 6 6 []
let pos = [(1.3,4.3); (5.6,5.4); (1.5,4.8)]
pos |> List.iter (fun (pz,py) ->
let z, y = int pz, int py
m.[z,y] <- (pz,py) :: m.[z,y]
)
大概可以这样实现:
let pos = [(1.3,4.3); (5.6,5.4); (1.5,4.8)]
Matrix.generic.init 6 6 (fun z y ->
pos |> List.fold (fun state (pz,py) ->
let iz, iy = int pz, int py
if iz = z && iy = y then (pz,py) :: state else state
) []
)
但我想它会慢得多,因为它循环遍历整个矩阵乘以列表而不是前一个列表迭代......
PS:代码可能有误,因为我在这台电脑上没有 F# 来检查它。
【问题讨论】:
标签: algorithm f# functional-programming