List 更新列表元素的问题
下面的函数旨在通过更新块中列表的元素来添加并行性,以尝试对其进行负载平衡。但是,它的giving me:property“item”不能设置为内部循环中的xs.[x1]。我必须使用一个列表,因为该函数的列表是一个更大算法的一部分。有什么建议吗List 更新列表元素的问题,list,data-structures,f#,task-parallel-library,List,Data Structures,F#,Task Parallel Library,下面的函数旨在通过更新块中列表的元素来添加并行性,以尝试对其进行负载平衡。但是,它的giving me:property“item”不能设置为内部循环中的xs.[x1]。我必须使用一个列表,因为该函数的列表是一个更大算法的一部分。有什么建议吗 let pmap_tpl_parforlb f (xs:list<_>) = let chunkLength = xs.Length / numProc Parallel.For(0,numProc, fun c ->
let pmap_tpl_parforlb f (xs:list<_>) =
let chunkLength = xs.Length / numProc
Parallel.For(0,numProc, fun c ->
let x = c * chunkLength
let y = (c * chunkLength) + chunkLength
let x1 = x+1
for x1 in 0..y-1 do
xs.[x1] <- f (xs.[x1])
) |> ignore
xs
让pmap_tpl_parforlb f(xs:list)=
让chunkLength=xs.Length/numProc
平行。对于(0,numProc,fun c->
设x=c*chunkLength
设y=(c*chunkLength)+chunkLength
设x1=x+1
对于0..y-1 do中的x1
xs.[x1]忽略
xs
chunkLength
,而是更短。您必须协调这一事实blah.[idx]
)访问列表值,但它非常罕见,而且速度也很慢,因为它是一个O(n)操作
从您发布的代码片段来看,似乎您应该将
xs
设置为数组而不是列表。或者,使用list.toArray
或array.ofList
将列表转换为数组,然后在并行中对其进行变异。对于,如果代码未编译,他将无法使用调试器。他正在获得一个er来自编译器的ror消息,而不是运行时的异常。实际上,整个示例看起来像是PLINQ的合适任务…:)