2
与Create an array with elements of different types的问题完全相同,但在Fortran中如何做到这一点?在Fortran中使用不同类型的元素创建数组
说我想要一个数组,第一维integer
类型,第二个real
和第三个character
(字符串)类型。是否可以在Fortran中创建“struct
”?
谢谢。
与Create an array with elements of different types的问题完全相同,但在Fortran中如何做到这一点?在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
编辑:由于每建议通过乔纳森·德西:
为了有一个数组,其中每个元素都有一个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。
只需添加; IRO-bot的答案正确地为您提供了一个派生类型,其中包含整数,浮点数和字符数组。如果你想要一个包含int + float + char的类型的数组,你可以像上面那样定义你的类型,但是在类型上没有DIMENSIONS - 例如,一个int,float和char - 然后定义例如。 TYPE(mytype),DIMENSION(10):: a'或'TYPE(mytype),ALLOCATABLE,DIMENSION(:),:: a'和后面的'allocate(a(10))'。 – 2011-12-19 13:51:40
@JonathanDursi感谢您的建议 - 我将其添加到答案。 – milancurcic 2011-12-19 16:48:35
非常感谢,伙计们。这非常有帮助。因此,使用派生类型我可以从主流/默认类型构建我自己的类型,我可以在定义中声明的形式/维度,或者更好的是,根据程序的运行方式稍后分配它。甜。 – 2011-12-20 00:14:47