4

我正在尝试定义一个数组数组。我已经定义:

  integer,dimension(2,2):: & 
    x=reshape(source= (/0,1,1,0/),  shape=(/2,2/)), & 
    y=reshape(source= (/1,0,0,1/),  shape=(/2,2/)), & 
    z=reshape(source= (/1,1,1,1/),  shape=(/2,2/)) 

我想定义一个数组,比如说,s(3),其中,(x/y/z) 是组件,即

s(1)=x 
s(2)=y 
and s(3)=z

我怎样才能做到这一点?

4

3 回答 3

7

最简单的方法可能是定义s为 rank-3 数组,也许

integer, dimension(3,2,2) :: s

然后您可以编写语句,例如

s(1,:,:) = x
s(2,:,:) = y
...

这是在 Fortran 中实现数组数组的“自然”方式。另一种可能更吸引您的选择是:

type :: twodarray
   integer, dimension(2,2) :: elements
end type twodarray

type(twodarray), dimension(3) :: s

s(1)%elements = x

如果您不喜欢冗长,可以为您的 types(1)%elements = x重新定义操作,我现在没有时间为您编写该代码。=twodarray

于 2013-10-29T21:56:26.543 回答
2

您始终可以使用指针(在 Fortran 95 中)

program main
  implicit none

  type :: my_type
     integer, pointer :: my_size(:)      ! F95
     !integer, allocatable :: my_size(:) ! F95 + TR 15581 or F2003
  end type my_type

  type(my_type), allocatable :: x(:)

  allocate(x(3))

  allocate(x(1)%my_size(3))
  allocate(x(2)%my_size(2))
  allocate(x(3)%my_size(1))

  print*, x(1)%my_size
  print*, x(2)%my_size
  print*, x(3)%my_size

  deallocate(x(3)%my_size, x(2)%my_size, x(1)%my_size)
  deallocate(x)

end program main

它会打印

       0           0           0
       0           0
       0
于 2013-10-31T04:03:07.697 回答
0

我无法找到我的 Fortan 77 书的硬拷贝电子书来提供给您。但是,这应该对您有用:

http://www.owlnet.rice.edu/~ceng303/manuals/fortran/FOR5_3.html

于 2013-10-29T21:53:05.787 回答