我们有两个数组。
let a = [| [|1|] |]
并且
let a' = Array2D.init 1 1 (fun x y -> 1)
第一个返回 int [][],第二个返回 int [,]。
有没有简单的方法将 int[,] 转换为 int[][]?
let a = [| [|1|] |]
并且
let a' = Array2D.init 1 1 (fun x y -> 1)
第一个返回 int [][],第二个返回 int [,]。
有没有简单的方法将 int[,] 转换为 int[][]?
没有内置的函数可以完成这个任务。我建议使用列表推导式语法,这似乎很简单:
let a =
[| for i in 0..(Array2D.length1 a' - 1) ->
[| for j in 0..(Array2D.length2 a' - 1) -> a'.[i,j] |] |]
需要注意的一点是基础索引。在您的示例中,数组是以零为基础的,因此我使用零只是为了使代码更短。但是,如果您需要支持非以零为基础的数组情况,则必须使用 a'.[ i + Array2D.base1 a', j + Array2D.base2 a' ]
。这不太优雅,但是你能怎么办呢。
Array.init
来构建[][]
(也称为不规则数组)形式。Array.init 10 (fun r -> Array.init 20 (fun c -> (c+r)))
[|[|0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19|];
[|1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20|];
[|2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21|];
...