我在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和MSDN about Array2D中,我了解到还有一些其他功能,例如init,initBased,create和createBased。由于我仍然只有几周时间学习这门语言,所以我不知道如何与他们合作。
答案 0 :(得分:4)
您可以完全取消createInitialArray
并内联createSquare
的来电:
let sudokuGame = Array2D.init 9 9 ( fun i j -> createSquare i j )
甚至更短,丢掉同义语lambda:
let sudokuGame = Array2D.init 9 9 createSquare