F#中array2D的更多功能替代品

时间:2012-03-19 07:49:22

标签: f# functional-programming

在F#中,array2Ds是可变的,不能用于功能最强大的代码。目前,当我想进行更改并返回数组时,我通过执行输入的Array2D.copy来隐藏它。即

let test (x : int[,]) =
    let y = Array2D.copy x
    y.[0,0] <- 3

是否有更好的方法可以使测试更具功能性?

1 个答案:

答案 0 :(得分:3)

您始终可以使用Array2D module上的高阶函数以函数样式使用Array2D。特别是,对数组索引进行操作的Array2D.mapi适用于此任务:

let test (xs: int[,]) =
   xs |> Array2D.mapi (fun i j x -> if i=0 && j=0 then 3 else x) 

修改

一般来说,您的test功能很好,因为您可以限制功能内部的副作用。在嵌套数组的情况下,您需要更加小心;但是,编写具有受控副作用的函数通常比使用Array2D的高阶函数提供更好的性能。