2016-12-02 88 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)));; 

這給了我需要的結果。