正如你建議,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