'a[,,]
和'a[][][]
有什么区别?它们都代表3维数组。
它使我写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[,]
中表示矩形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,*];;
见https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/arrays#array-slicing-and-multidimensional-arrays
关于f# - F#多维数组类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2909310/