【问题标题】:Multi dimensional array with varying size不同大小的多维数组
【发布时间】:2013-06-18 04:30:45
【问题描述】:

我想制作一个具有以下维度的二维数组“数据”:data(T,N) T 是一个常数,而 N 我什么都不知道。有没有可能在fortran中做这样的事情

      do i = 1, T
           check a few flags
           if (all flags ok) 
             c = c+ 1
             data(i,c) = some value
           end if
       end do

基本上我不知道第二个维度。根据一些标志,如果这些标志没问题,我想继续向数组中添加更多元素。

我该怎么做?

【问题讨论】:

  • 对不起,它是一个二维数组

标签: arrays multidimensional-array fortran


【解决方案1】:

有几种可能的解决方案。您可以将data 设为可分配数组并猜测N 的最大值。只要您不超过N,您就可以继续添加数据项。如果新项目超出数组大小,则创建一个临时数组,将 data 复制到临时数组,解除分配 data 并重新分配更大的维度。

另一种设计选择是使用链表。这更灵活,因为长度是不确定的。您失去了“随机访问”,因为列表是链接的而不是索引的。您创建一个包含各种数据的用户定义类型,例如,缩放器、数组等,还有一个指针。添加列表项时,指针指向下一项。由于支持指针,因此在 Fortran >=90 中是可能的。

我建议搜索网络或阅读有关这些数据结构的书籍。

【讨论】:

    【解决方案2】:

    假设您编写的内容或多或少是您的代码的实际运行方式,那么您肯定知道一件事:N 不能大于 T。您不必更改您的do-loop,但您肯定需要在循环之前初始化data

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 2019-02-10
      • 2012-10-19
      • 1970-01-01
      相关资源
      最近更新 更多