'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 [,]
答案 0 :(得分:35)
不同之处在于'a[][]
表示数组(可能长度不同),而'a[,]
表示矩形2D数组。第一种类型也称为锯齿状数组,第二种类型称为多维数组。区别与C#相同,因此您可能需要查看jagged arrays和multidimensional 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,*];;
答案 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]