有没有办法获取2D数组并获取列表列表。这似乎是一个简单的操作,但我找不到解决方法。 这段代码显然行不通:
let arr = Array2D.create 4 4 0
let listOfLists = arr |> List.ofArray
答案 0 :(得分:2)
Array2D
(多维数组)和锯齿状数组(数组数组)是两种不同的类型。您可以从类型签名中看到它:
let arr = Array2D.create 4 4 0 // int[,]
let arrJagged = toJagged arr // int [][]
如果您需要一个多维数组,建议您坚持使用它或使用专用的构建矩阵库(例如math.net)。 F#中的List
是一个单链接的不可变列表,具有一些不错的(容易创建和递归)而不是那么好的(性能)属性。 AFAIK,没有2D列表(扩展核心库中可能有一些适当的数据结构)。
但是您可以轻松地将2D数组转换为数组列表或列表列表,这与锯齿状数组等效。这是一个班轮:
[for i in 0 .. 3 -> arr.[*,i] |> Array.toList]
val it:int列表= [[0; 0; 0; 0]; [0; 0; 0; 0]; [0; 0; 0; 0]; [0; 0; 0; 0]]
或更笼统:
let toListList arr =
[for x in 0 .. Array2D.length1 arr - 1 ->
[ for y in 0 .. Array2D.length2 arr - 1 -> arr.[x, y] ]
]
toListList arr ;;
val it:int list list = [[0; 0; 0; 0]; [0; 0; 0; 0]; [0; 0; 0; 0]; [0; 0; 0; 0]]