【发布时间】:2016-03-08 08:57:59
【问题描述】:
我在 f# 中遇到一些我不理解的行为。我试图使用嵌套数组创建一个二维表。子数组将具有相同的长度,所以我可以使用 Array2D。但是稍后我将需要将表行作为普通数组,因此为了避免从多维数组转换为常规数组,我想将表表示为锯齿状数组。
以下代码是我如何初始化和分配表中元素的示例。
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 查找子数组的内存地址,在我看来它们是不同的,所以它们三行不是同一个数组。这是怎么回事?
【问题讨论】:
标签: arrays multidimensional-array f#