F#多维数组类型

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)

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


Col*_*nic 6

从 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]
Run Code Online (Sandbox Code Playgroud)

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