F#2D阵列备用创建

时间:2015-05-26 14:53:56

标签: arrays f# 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 generalMSDN about Array2D中,我了解到还有一些其他功能,例如init,initBased,create和createBased。由于我仍然只有几周时间学习这门语言,所以我不知道如何与他们合作。

1 个答案:

答案 0 :(得分:4)

您可以完全取消createInitialArray并内联createSquare的来电:

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

甚至更短,丢掉同义语lambda:

let sudokuGame = Array2D.init 9 9 createSquare