OCaml - 声明 n 维数组

OCaml - declaring n-dimensional arrays

我想在 ocaml 中创建 3 维数组。这是我尝试做的事情:

let dp = Array.make n (Array.make n (Array.make k (-1))

但是它不起作用 - 更改值 dp[0][0][0] 会更改所有值 dp[i][j][0]。那么如何创建具有不同数组而不是相同数组副本的矩阵?

Array.make n v 只会复制第二个参数 n 次。换句话说,它将循环分配给每个元素。由于数组(以及所有其他堆分配的值)是通过引用传递的,因此所有单元格都将指向同一个数组。您需要使用 Array.init 函数,它将为每个元素调用用户提供的函数:

let dp = Array.init n (fun _ -> Array.init n (fun _ -> (Array.make k 0)))

但是,对于真正的多维数字代码,你不应该使用数组,而是使用 Bigarray 模块。这是示例:

open Bigarray
let dp = Array3.create int c_layout 3 3 3
dp.{0,0,0} <- 1