F# convert Array2 into a list

流过昼夜 提交于 2019-12-22 08:07:01

问题


I'm still new to functional programming so if I can't figure out how to do something I revert back to procedural style. I found a way to get around having to convert to a list but I'd still like to know how.

Here is my attempt to convert a two dimensional array to a list.

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))

回答1:


Apparently in .Net, multi-dimensional arrays are IEnumerable (non-generic), and thus this works:

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

EDIT: As Noldorin points out in a comment, this is even better:

let l = a2 |> Seq.cast<int> |> Seq.toList


来源:https://stackoverflow.com/questions/648193/f-convert-array2-into-a-list

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!