【问题标题】:F# Multidimensional Array TypesF# 多维数组类型
【发布时间】:2010-05-25 23:50:54
【问题描述】:

'a[,,]'a[][][] 有什么区别?它们都代表 3-d 数组。 它让我写 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 [,]

【问题讨论】:

    标签: f# multidimensional-array


    【解决方案1】:

    不同之处在于'a[][] 表示一个数组数组(长度可能不同),而'a[,] 表示一个矩形二维数组。第一种也称为锯齿状数组,第二种称为多维数组。区别与 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

    【讨论】:

      【解决方案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]
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 2021-05-20
        相关资源
        最近更新 更多