f# - F#多维数组类型

标签 f# multidimensional-array

'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 arraysmultidimensional 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/

相关文章:

recursion - 实现将实数转换为 #F 中的连分数的算法

functional-programming - 累积错误的结果生成器

haskell - 是否有等效于 F# 测量单位的 Haskell?

java - 尝试在同一行上逐行打印多个二维数组

c++ - 可以根据任何属性对对象数组进行排序的函数模板

parsing - 如何解决 FParsec 错误 "The combinator ' much' 已应用于解析器,该解析器无需消耗即可成功......”

f# - 如果 "till"解析器以空格开头,为什么 manyCharsTill 组合器不起作用?

c++ - 如何在 C++ 的多维 vector 中 pop_back 整行

arrays - Swift:定义数组内部具有不同类型的新三维数组

PHP 多维数组帮助