2013-08-19 41 views

回答

17

是的,没有。第一无:

正确阵列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)) 
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)) 

这使得符号一点不太麻烦..

相关问题