F#多维数组类型

F#多维数组类型,f#,multidimensional-array,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 h

'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 [,]

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

要使用图片演示这一点,类型为
'a[][]
的值可以如下所示:

0 1 2 3 4
5 6
7 8 9 0 1
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
0 1 2 3
4 5 6 7
8 9 0 1

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

从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]