0
我在f#中遇到了一些我不明白的行爲。我試圖用嵌套數組創建一個2D表。子數組的長度相同,所以我可以使用Array2D。然而,後來我將需要表格行作爲正常數組,所以爲了避免從多維轉換爲常規數組,我想將表格表示爲鋸齒形數組。F# - (鋸齒形)2d陣列中的賦值元素設置了幾個元素
以下代碼是我如何在表中初始化和分配元素的示例。
let table = Array.create 3 (Array.zeroCreate<int> 2);;
table.[0].[0] <- 1;;
我期待這段代碼設置第一行的第一個元素。但是,它實際上所做的是將第一個元素設置爲全部三行。
table;;
val it : int [] [] = [|[|1; 0|]; [|1; 0|]; [|1; 0|]|]
爲什麼table.[0].[0]
在所有三個子數組中設置第一個元素?我試圖找到使用System.Runtime.InteropServices.Marshal.UnsafeAddrOfPinnedArrayElement
的子數組的內存地址,在我看來,他們是不同的,所以他們三行不是相同的數組。這裏發生了什麼?