在 Fortran 中创建具有不同类型元素的数组

Posted

技术标签:

【中文标题】在 Fortran 中创建具有不同类型元素的数组【英文标题】:Create array with elements of different type in Fortran 【发布时间】:2012-01-23 08:12:32 【问题描述】:

与Create an array with elements of different types 完全相同的问题,除了如何在 Fortran 中执行此操作?

假设我想要一个数组,第一个维度是 integer 类型,第二个维度是 real,第三个维度是 character(字符串)类型。是否也可以在 Fortran 中创建“struct”?

谢谢。

【问题讨论】:

【参考方案1】:

这是一个使用派生类型的示例程序:

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)%intsa(i)%floatsa(i)%chars。 相关答案在Allocate dynamic array with interdependent dimensions中给出。

【讨论】:

只是添加; IRO-bot 的回答正确地为您提供了一个派生类型,其中包含整数、浮点数和字符数组。如果您想要一个(包含 int + float + char 的类型)的数组,您可以像上面那样定义您的类型,但在类型上没有 DIMENSIONS - 例如,单个 int、float 和 char - 然后定义例如。 TYPE(mytype), DIMENSION(10) :: aTYPE(mytype), ALLOCATABLE, DIMENSION(:), :: a 和更高版本的 allocate(a(10)) @JonathanDursi 感谢您的建议 - 我将此添加到答案中。 非常感谢,伙计们。这很有帮助。因此,使用派生类型,我可以从主流/默认类型构造我自己的类型,我可以在定义中声明其形状/尺寸,或者更好的是,稍后根据程序运行方式分配它。甜蜜。

以上是关于在 Fortran 中创建具有不同类型元素的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中的每个arraylist中创建具有不同类型对象的arraylist数组?

我无法在 Java 中创建泛型数组类型的原因是啥?

Fortran函数,根据输入返回标量OR数组

在 C++ 中的类中创建类对象的动态数组

如何在没有初始化和特定数量元素的情况下在 Kotlin 中创建对象数组?

在 Fortran 中使用子模块进行通用分配