我仍然是函数式编程的新手,所以如果我无法弄清楚如何做某些事情,我会回归到程序式。我找到了一种方法来转换到列表,但我仍然想知道如何。
这是我尝试将二维数组转换为列表。
let board = Array2.init 10 20 (fun i j -> pull(i, j))
let mutable pieces = []
board
|> Array2.mapi (fun i j a -> transform(i, j, a))
|> Array2.iter (fun a -> (pieces <- a :: pieces))
答案 0 :(得分:8)
显然在.Net中,多维数组是IEnumerable(非泛型),因此可行:
let a2 = Array2.init 2 3 (fun x y -> (x+1)*(y+1))
let l = a2 |> Seq.cast<int> |> Seq.fold (fun l n -> n :: l) []
printfn "%A" l
编辑:正如Noldorin在评论中指出的那样,这甚至更好:
let l = a2 |> Seq.cast<int> |> Seq.toList