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
我在 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