不同长度的多维数组

14

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

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

这可行吗?我已经花了相当多的时间去寻找,但无法确定。

2个回答

20

是和不是。首先是不:

在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

采用这种方法,您可以将每个向量元素分配给不同的大小。例如:

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))

4

看第一个答案,似乎没有必要创建派生类型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))

这使得符号更加简洁。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接