【问题标题】:Multidimensional array with different lengths不同长度的多维数组
【发布时间】:2013-08-21 09:57:07
【问题描述】:

我正在尝试在第二维中创建一个具有不同长度的数组,例如:

  A = 1 3 5 6 9
      2 3 2
      2 5 8 9

这可能吗?我花了相当多的时间寻找,但无法找到任何一种方式。

【问题讨论】:

    标签: arrays multidimensional-array fortran


    【解决方案1】:

    看第一个答案,似乎没有必要创建派生类型vector,它实际上只是一个可分配的整数数组:

        type ragged_array
        integer,allocatable::v(:)
        end type ragged_array
        type(ragged_array),allocatable::r(:)
        allocate(r(3))
        allocate(r(1)%v(5))
        allocate(r(2)%v(10))
        allocate(r(3)%v(15))
    

    这使得符号不那么繁琐..

    【讨论】:

      【解决方案2】:

      是的,不是的。首先是号:

      Fortran 中的正确数组,例如像这样声明的数组:

      integer, dimension(3,3,4) :: an_array
      

      或者像这样

      integer, dimension(:,:,:,:), allocatable :: an_array
      

      是常规的;每个维度只有一个范围。

      但是,如果你想为一个参差不齐的数组定义你自己的类型,你可以,而且相对容易:

      type :: vector
          integer, dimension(:), allocatable :: elements
      end type vector
      
      type :: ragged_array
          type(vector), dimension(:), allocatable :: vectors
      end type ragged_array
      

      通过这种方法,您可以将每个vectorselements 分配给不同的大小。例如:

      type(ragged_array) :: ragarr
      ...
      allocate(ragarr%vectors(5))
      ...
      allocate(ragarr%vectors(1)%elements(3))
      allocate(ragarr%vectors(2)%elements(4))
      allocate(ragarr%vectors(3)%elements(6))
      

      【讨论】:

        猜你喜欢
        • 2020-01-17
        • 2021-04-24
        • 2019-02-05
        • 2023-02-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多