2013-08-19 20 views

Odpowiedz

17

Tak i nie. Najpierw no:

Odpowiednie tablice w języku Fortran, takie jak te zadeklarowane tak:

integer, dimension(3,3,4) :: an_array 

lub jak to

integer, dimension(:,:,:,:), allocatable :: an_array 

są prawidłowe; dla każdego wymiaru istnieje tylko jeden zakres.

Ale, jeśli chcesz określić własny typ na nierównym tablicy można, i to jest stosunkowo proste:

type :: vector 
    integer, dimension(:), allocatable :: elements 
end type vector 

type :: ragged_array 
    type(vector), dimension(:), allocatable :: vectors 
end type ragged_array 

Przy tego rodzaju podejściu można przeznaczyć elements każdego z vectors Do inny rozmiar. Na przykład:

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

patrząc w pierwszej odpowiedzi, jak się wydaje, nie ma potrzeby, aby utworzyć pochodzący typ vector który jest naprawdę tylko allocatable tablica całkowita:

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

to sprawia, że ​​zapis trochę mniej uciążliwe ..

Powiązane problemy