正如你建议,answer另一个问题,看着破烂阵列可能是你想要什么,我会简单地提到了易用性扩展到这个问题的答案(在评论由Doug利平斯基暗示)。
对于基类型,表示可变长度尺寸,由高性能给出马克
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))
! etc.
[或者,也可以尝试只有一组type(vector)
。]
对于可用性方面的一种可以创建的结构的构造,其确实的众多分配,或者甚至依赖于自动分配可变长度的组件。
在后一种情况下,这是有意义的,如果值,而不仅仅是区段,以创建已知的。
allocate(ragarr%vectors(5))
ragarr%vectors(1)%elements = [1, 6, 13]
! etc.
对于前一种情况,像
module ragged
implicit none
type :: vector
integer, dimension(:), allocatable :: elements
end type vector
type :: ragged_array
type(vector), dimension(:), allocatable :: vectors
end type ragged_array
interface ragged_array
module procedure ragged_constructor
end interface ragged_array
contains
function ragged_constructor(sizes) result(ra)
integer, intent(in) :: sizes(:)
type(ragged_array) ra
integer i
allocate(ra%vectors(SIZE(sizes)))
do i=1,SIZE(sizes)
allocate(ra%vectors(i)%elements(sizes(i)))
end do
end function ragged_constructor
end module ragged
program test
use ragged
implicit none
type(ragged_array) :: ra
ra = ragged_array([3,4,6,1,12])
end program
你[破烂阵列]后(http://stackoverflow.com/q/18316592/3157076)?无论哪种方式,你都可能看到多个声明。 – francescalus 2014-12-06 13:28:09
你应该看看'ALLOCATABLE'关键字。 – 2014-12-06 16:17:41
那么,在这里,衣衫褴褛的数组似乎很有用。 Allocatable当然没有帮助。据我所知,它只适用于常规数组。 – Peaceful 2014-12-06 18:22:12