Min*_*ang 17 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 [,]
Run Code Online (Sandbox Code Playgroud)
Tom*_*cek 35
区别在于'a[][]
表示阵列阵列(可能长度不同),而in 'a[,]
表示矩形2D阵列.第一种类型也称为锯齿状数组,第二种类型称为多维数组.区别与C#相同,因此您可能需要查看锯齿状数组和多维数组的C#文档.F#WikiBook中还有一个优秀的文档.
要使用图片演示这一点,类型的值'a[][]
可能如下所示:
0 1 2 3 4
5 6
7 8 9 0 1
Run Code Online (Sandbox Code Playgroud)
虽然type的值a[,]
总是一个矩形,可能看起来像这样:
0 1 2 3
4 5 6 7
8 9 0 1
Run Code Online (Sandbox Code Playgroud)
要获取多维数组的单个"行",可以使用切片表示法:
let row = array2d.[0,*];;
Run Code Online (Sandbox Code Playgroud)
从 F# 3.1 (2013) 开始,事情变得更简单:
从 F# 3.1 开始,您可以将多维数组分解为相同或更低维度的子数组。例如,您可以通过指定单个行或列从矩阵获取向量。
Run Code Online (Sandbox Code Playgroud)// Get row 3 from a matrix as a vector: matrix.[3, *] // Get column 3 from a matrix as a vector: matrix.[*, 3]