F#将Array2D转换为数组数组

时间:2016-06-15 17:47:43

标签: multidimensional-array f#

在F#中有一种将float [,]转换为float [] []的简洁方法吗?如果这看起来像是一件愚蠢的事情,那么我可以在生成的数组数组上使用Array.zip。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:8)

这应该可以解决问题:

module Array2D = 
    let toJagged<'a> (arr: 'a[,]) : 'a [][] = 
        [| for x in 0 .. Array2D.length1 arr - 1 do
               yield [| for y in 0 .. Array2D.length2 arr - 1 -> arr.[x, y] |]
            |]

答案 1 :(得分:2)

请注意,Array2D可以有一个非零的基数。对于每个维度,我们可以利用其基数和长度的初始化函数。这可能是一个本地范围的运营商:

let toArray arr =
    let ($) (bas, len) f = Array.init len ((+) bas >> f)
    (Array2D.base1 arr, Array2D.length1 arr) $ fun x ->
        (Array2D.base2 arr, Array2D.length2 arr) $ fun y ->
            arr.[x, y]
// val toArray : arr:'a [,] -> 'a [] []

我没有看到如何推广Array.zip的后续应用,因为这意味着在一个维度上长度为2。