在Fortran中创建包含不同类型元素的数组

Sam*_*Tan 3 arrays struct fortran

与使用不同类型的元素创建数组完全相同的问题,除了如何在Fortran中执行此操作?

假设我想要一个第一维的数组,一个integer类型,第二个real和第三个character(字符串)类型.是否有可能struct在Fortran中创建一个" "?

谢谢.

mil*_*cic 8

以下是派生类型使用的示例程序:

TYPE mytype
  INTEGER,DIMENSION(3)   :: ints
  REAL,DIMENSION(5)      :: floats
  CHARACTER,DIMENSION(3) :: chars
ENDTYPE mytype

TYPE(mytype) :: a

a%ints=[1,2,3]
a%floats=[1,2,3,4,5]
a%chars=['a','b','c']

WRITE(*,*)a

END
Run Code Online (Sandbox Code Playgroud)

输出是:

        1            2            3    1.000000        2.000000     
3.000000        4.000000        5.000000     abc
Run Code Online (Sandbox Code Playgroud)

编辑:根据Jonathan Dursi的建议:

为了得到一个数组,其中每个元素都有一个int,float和char元素,你可以这样做:

TYPE mytype
  INTEGER   :: ints
  REAL      :: floats
  CHARACTER :: chars
ENDTYPE mytype

TYPE(mytype),DIMENSION(:),ALLOCATABLE :: a

ALLOCATE(a(10))
Run Code Online (Sandbox Code Playgroud)

这样,你会引用您的元素,例如a(i)%ints,a(i)%floats,a(i)%chars.相关答案在具有相互依赖维度的Allocate动态数组中给出.

  • 只是添加; IRO-bot的答案正确地为您提供了一个派生类型,其中包含整数,浮点数和字符数组.如果你想要一个数组(包含int + float + char的类型),你可以像上面那样定义你的类型,但是在类型上没有DIMENSIONS - 例如,一个int,float和char - 然后定义例如.`TYPE(mytype),DIMENSION(10):: a`或`TYPE(mytype),ALLOCATABLE,DIMENSION(:),:: a`以及``allocate(a(10))`. (2认同)