是否有构建2D数组的简写方法?
我真的不想做以下事情:
let board = array2D [|
[| 0;0 |]
[| 0;1 |]
[| 0;2 |]
[| 0;3 |]
[| 0;4 |]
[| 0;5 |]
[| 0;6 |]
[| 0;7 |]
[| 1;0 |]
[| 1;1 |]
[| 1;2 |]
...
[| 7;7 |]
|]
我以为我可以这样做:
let board = array2D [|
[| 0;0 |]..[|7;7|]
|]
或者这个:
let board = array2D [|
[| 0.., 0..7 |]
|]
任何指导?
答案 0 :(得分:6)
Ringil的答案更为正确(对于你提出的问题)。但是,如果您正在寻找具有略微不同阵列形状的其他方式,则可以执行以下操作:
您可以使用Array2D.init:
> let board = Array2D.init 8 8 (fun x y -> (x,y));;
val board : (int * int) [,] =
[[(0, 0); (0, 1); (0, 2); (0, 3); (0, 4); (0, 5); (0, 6); (0, 7)]
[(1, 0); (1, 1); (1, 2); (1, 3); (1, 4); (1, 5); (1, 6); (1, 7)]
[(2, 0); (2, 1); (2, 2); (2, 3); (2, 4); (2, 5); (2, 6); (2, 7)]
[(3, 0); (3, 1); (3, 2); (3, 3); (3, 4); (3, 5); (3, 6); (3, 7)]
[(4, 0); (4, 1); (4, 2); (4, 3); (4, 4); (4, 5); (4, 6); (4, 7)]
[(5, 0); (5, 1); (5, 2); (5, 3); (5, 4); (5, 5); (5, 6); (5, 7)]
[(6, 0); (6, 1); (6, 2); (6, 3); (6, 4); (6, 5); (6, 6); (6, 7)]
[(7, 0); (7, 1); (7, 2); (7, 3); (7, 4); (7, 5); (7, 6); (7, 7)]]
如果有人发现它有用,我会把它留在这里,因为我认为这种数据形状在很多情况下都有意义。
答案 1 :(得分:6)
也许你需要的是一种理解:
array2D [for i in 0..7 do for j in 0..7 do yield [|i;j|] ]
这将按您想要的顺序返回您想要的内容:
val it : int [,] = [[0; 0]
[0; 1]
[0; 2]
[0; 3]
[0; 4]
[0; 5]
[0; 6]
[0; 7]
[1; 0]
[1; 1]
[1; 2]
[1; 3]
[1; 4]
[1; 5]
[1; 6]
[1; 7]
[2; 0]
[2; 1]
[2; 2]
[2; 3]
[2; 4]
[2; 5]
[2; 6]
[2; 7]
[3; 0]
[3; 1]
[3; 2]
[3; 3]
[3; 4]
[3; 5]
[3; 6]
[3; 7]
[4; 0]
[4; 1]
[4; 2]
[4; 3]
[4; 4]
[4; 5]
[4; 6]
[4; 7]
[5; 0]
[5; 1]
[5; 2]
[5; 3]
[5; 4]
[5; 5]
[5; 6]
[5; 7]
[6; 0]
[6; 1]
[6; 2]
[6; 3]
[6; 4]
[6; 5]
[6; 6]
[6; 7]
[7; 0]
[7; 1]
[7; 2]
[7; 3]
[7; 4]
[7; 5]
[7; 6]
[7; 7]]