是否有构建2D数组的简写方法?

时间:2016-07-26 13:08:57

标签: f#

是否有构建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 |]
                    |]

任何指导?

2 个答案:

答案 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]]