【发布时间】:2012-01-23 08:12:32
【问题描述】:
与Create an array with elements of different types 完全相同的问题,除了如何在 Fortran 中执行此操作?
假设我想要一个数组,第一个维度是 integer 类型,第二个维度是 real,第三个维度是 character(字符串)类型。是否也可以在 Fortran 中创建“struct”?
谢谢。
【问题讨论】:
与Create an array with elements of different types 完全相同的问题,除了如何在 Fortran 中执行此操作?
假设我想要一个数组,第一个维度是 integer 类型,第二个维度是 real,第三个维度是 character(字符串)类型。是否也可以在 Fortran 中创建“struct”?
谢谢。
【问题讨论】:
这是一个使用派生类型的示例程序:
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
输出是:
1 2 3 1.000000 2.000000
3.000000 4.000000 5.000000 abc
编辑:根据 Jonathan Dursi 的建议:
为了让每个元素都有一个 int、float 和 char 元素的数组,你可以这样做:
TYPE mytype
INTEGER :: ints
REAL :: floats
CHARACTER :: chars
ENDTYPE mytype
TYPE(mytype),DIMENSION(:),ALLOCATABLE :: a
ALLOCATE(a(10))
然后您将引用您的元素,例如a(i)%ints、a(i)%floats、a(i)%chars。
相关答案在Allocate dynamic array with interdependent dimensions中给出。
【讨论】:
TYPE(mytype), DIMENSION(10) :: a 或 TYPE(mytype), ALLOCATABLE, DIMENSION(:), :: a 和更高版本的 allocate(a(10))。