F#多维数组类型

时间:2010-05-25 23:50:54

标签: f# multidimensional-array

'a[,,]'a[][][]之间有什么区别?它们都代表三维阵列。 它让我写array3d.[x].[y].[z]而不是array3d.[x, y, z]

为什么我不能做以下事情?

> let array2d : int[,] = Array2D.zeroCreate 10 10;;
> let array1d = array2d.[0];;

error FS0001: This expression was expected to have type
    'a []    
but here has type
    int [,]

2 个答案:

答案 0 :(得分:35)

不同之处在于'a[][]表示数组(可能长度不同),而'a[,]表示矩形2D数组。第一种类型也称为锯齿状数组,第二种类型称为多维数组。区别与C#相同,因此您可能需要查看jagged arraysmultidimensional arrays的C#文档。 F# WikiBook中还有一个优秀的文档。

要使用图片演示此内容,'a[][]类型的值可能如下所示:

0 1 2 3 4
5 6
7 8 9 0 1

虽然a[,]类型的值始终是一个矩形,但可能会显示如下:

0 1 2 3
4 5 6 7
8 9 0 1

要获得多维数组的单个“行”,可以使用切片表示法

let row = array2d.[0,*];;

请参阅https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/arrays#array-slicing-and-multidimensional-arrays

答案 1 :(得分:2)

自F#3.1(2013)起,事情变得更简单:

  

从F#3.1开始,您可以将多维数组分解为相同或更低维度的子数组。例如,您可以通过指定单个行或列来从矩阵中获取矢量。

// Get row 3 from a matrix as a vector:
matrix.[3, *]

// Get column 3 from a matrix as a vector:
matrix.[*, 3]

请参阅https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/arrays#array-slicing-and-multidimensional-arrays