我正在为二维数组编写基本函数。有两种写“set”函数的方法。第一个包括制作矩阵的副本,然后对其进行修改:
let copy_matrix (m: 'a array array): 'a array array =
let l = Array.length m in
if l = 0 then m else
let result = Array.make l m.(0) in
for i = 0 to l - 1 do
result.(i) <- Array.copy m.(i)
done;
result
let set_copy (m: 'a array array) (r: int) (c: int) (v: 'a): 'a array array =
let m' = copy_matrix m in
m'.(r).(c) <- v;
m'
第二个只是直接在矩阵上修改:
let set (m: 'a array array) (r: int) (c:int) (v: 'a) : unit =
m.(r).(c) <- v
我认为如果它是在 Java 中,那么显然第二个函数比第一个函数更快、更经济。但是,有人(我忘记了)告诉我,1)OCaml 的内存管理非常聪明,set_copy
不会花费太多,2)有一些原因(我忘记了)它set_copy
比set
.
谁能告诉我这是不是真的?