2015-05-26 39 views
3

我在f#中使用Array2D模块,并且想要使用它创建一个数独游戏板(9x9阵列)。现在我有一些作品和看起来像这样:F#2D阵列替代创建

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。由于我还只有几个星期的时间学习这门语言,所以我没有看到我可以如何与他们合作。

回答

4

你完全可以用createInitialArray废除和内嵌调用createSquare

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

或者更短,下降的同义反复拉姆达:

let sudokuGame = Array2D.init 9 9 createSquare 
+0

啊,它看起来真的很不错!我现在正在公车上,但很快就会试用。谢谢! –

+0

刚试过它,它完美的作品,谢谢! –