2016-12-02 48 views
0

以下是我无法解决的问题,我正在使用ocaml将数组元素复制到新数组中。我希望能够相互独立地修改这些数组,但无论我尝试什么,对其中一个数组的更改也会反映在另一个数组中。 下面是一个简单的例子:将变量赋值给数组元素,其中变量和数组可以在ocaml中独立修改

type sampleType = { a : int; b : int array };; 
let x = {a = 5; b = [|1, 2, 3|] };; 
let y = x.b;; 
Array.set y 1 6;; 

运行这些命令后,我想:

y - : int array = [|1; 6; 3|] 
x - : sampleType = {a = 5; b = [|1; 2; 3|]} 

相反x正在与y而变化,并且

x - : sampleType = {a = 5; b = [|1; 6; 3|]} 

这个问题的任何解决方案?

+0

欢迎来到Stack Overflow!如果你将代码格式化为代码,通过缩进四个空格,或者像\\''这样将其包装为'\',你的帖子将会更加漂亮。 –

回答

1

当你从你的实验中看到的,这个代码:

let y = x.b 

使得y指非常相同的阵列为x.b。它不创建独立数组。要创建一个独立的数组,你需要复制:

let y = Array.copy x.b 
0

我是专门使用三维阵列,实现了我在3D阵列的最低级别,以应用于Array.copy,而不是在顶层。

let arr = Array.init 3 (fun _ -> Array.init 3 (fun _ -> (Array.init 3 (fun _ -> {faces = [|0;1;2;3;4|]}))));; 
let drr = Array.init 3 (fun i -> Array.init 3 (fun j -> Array.copy arr.(i).(j)));; 

这给了我需要的结果。