【发布时间】:2013-08-21 09:57:07
【问题描述】:
我正在尝试在第二维中创建一个具有不同长度的数组,例如:
A = 1 3 5 6 9
2 3 2
2 5 8 9
这可能吗?我花了相当多的时间寻找,但无法找到任何一种方式。
【问题讨论】:
标签: arrays multidimensional-array fortran
我正在尝试在第二维中创建一个具有不同长度的数组,例如:
A = 1 3 5 6 9
2 3 2
2 5 8 9
这可能吗?我花了相当多的时间寻找,但无法找到任何一种方式。
【问题讨论】:
标签: arrays multidimensional-array fortran
看第一个答案,似乎没有必要创建派生类型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))
这使得符号不那么繁琐..
【讨论】:
是的,不是的。首先是号:
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
通过这种方法,您可以将每个vectors 的elements 分配给不同的大小。例如:
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))
【讨论】: