F# 二维数组交替创建

F# 2D Array alternate creation

我在 f# 中使用 Array2D 模块,想用它创建一个数独游戏板(一个 9x9 数组)。现在我有一些有用的东西,看起来像这样:

let createInitialArray = [| [|for x in 1 .. 9 -> createSquare x 1 |]; 
                            [|for x in 1 .. 9 -> createSquare x 2 |]; 
                            [|for x in 1 .. 9 -> createSquare x 3 |]; 
                            [|for x in 1 .. 9 -> createSquare x 4 |]; 
                            [|for x in 1 .. 9 -> createSquare x 5 |]; 
                            [|for x in 1 .. 9 -> createSquare x 6 |]; 
                            [|for x in 1 .. 9 -> createSquare x 7 |]; 
                            [|for x in 1 .. 9 -> createSquare x 8 |]; 
                            [|for x in 1 .. 9 -> createSquare x 9 |] |]

let sudokuGame = Array2D.init 9 9 ( fun i j -> createInitialArray.[j].[i] )

我的问题是是否有更好或更紧凑的写法?

MSDN about arrays in general and MSDN about Array2D 中,我了解到还有一些其他函数,例如 init、initBased、create 和 createBased。由于我还只有几周的时间来学习这门语言,所以我不知道如何与他们合作。

您完全可以取消 createInitialArray 并将调用内联到 createSquare:

let sudokuGame = Array2D.init 9 9 ( fun i j -> createSquare i j )

或者更短,去掉重言式的 lambda:

let sudokuGame = Array2D.init 9 9 createSquare