正在寻找一种更简洁的方式来编写相对常见的循环?
Looking for a more concise way of writing a relatively common loop?
这种比较常见的循环,有没有更简洁的写法,
70 M=NTOC-N
L=0
DO 100 I=M,NTOC
L=L+1
X(L)=XI(I)
100 Y(L)=YI(I)
没有进入索引的定义,它所做的是将数组 XI、YI 的内容从索引 M 复制到 NTOC到数组 X,Y 索引 1 到 ... (NTOC-M) ... 需要多少。
在重构一些较旧的代码时,我注意到我有很多这种循环,虽然我当时可能并不了解,但我想知道 现在有没有一种更简洁的方式来编写它以提高代码的易读性/可读性?虽然很大程度上依赖于循环,但我知道现在的 Fortran 对所有类型的数组操作都有很好的支持,所以如果有人知道他们认为可以更清晰的方式,我将非常感谢所有建议!
假设 n
为正,在循环过程中 i
取值 m
、m+1
、...、ntoc
和所以选择的 xi
的元素依次是 xi(m)
、xi(m+1)
、...、xi(ntoc)
。 yi
的元素相似
就数组部分而言,xi(m:ntoc)
表示相同的 selection 元素。
同理,x
左边的元素是x(1)
, x(2)
, ..., x(ntoc-m+1)
(=x(n+1)
).作为数组部分,x(1:n+1)
表示相同的元素。
这意味着:
x(1:n+1)=xi(ntoc-n:ntoc) ! Replacing m with its value
y(1:n+1)=yi(ntoc-n:ntoc)
并且如果边界是 x
和 y
是 1
和 n+1
,或者数组是可分配的,那么整个数组 x
和y
可以用在左侧。
对于 n
零或负数,数组部分将安全地 select 与循环相同的元素(一个或 none)。
如果你要在该片段之外使用 i
和 l
那么你当然必须手动设置它们(并且不要忘记 i
会取值 ntoc+1
).
最后,如果您想要更多的动力来摆脱该循环:请注意,像这样的非块 do 结构已被 Fortran 2015 删除。
这种比较常见的循环,有没有更简洁的写法,
70 M=NTOC-N
L=0
DO 100 I=M,NTOC
L=L+1
X(L)=XI(I)
100 Y(L)=YI(I)
没有进入索引的定义,它所做的是将数组 XI、YI 的内容从索引 M 复制到 NTOC到数组 X,Y 索引 1 到 ... (NTOC-M) ... 需要多少。
在重构一些较旧的代码时,我注意到我有很多这种循环,虽然我当时可能并不了解,但我想知道 现在有没有一种更简洁的方式来编写它以提高代码的易读性/可读性?虽然很大程度上依赖于循环,但我知道现在的 Fortran 对所有类型的数组操作都有很好的支持,所以如果有人知道他们认为可以更清晰的方式,我将非常感谢所有建议!
假设 n
为正,在循环过程中 i
取值 m
、m+1
、...、ntoc
和所以选择的 xi
的元素依次是 xi(m)
、xi(m+1)
、...、xi(ntoc)
。 yi
的元素相似
就数组部分而言,xi(m:ntoc)
表示相同的 selection 元素。
同理,x
左边的元素是x(1)
, x(2)
, ..., x(ntoc-m+1)
(=x(n+1)
).作为数组部分,x(1:n+1)
表示相同的元素。
这意味着:
x(1:n+1)=xi(ntoc-n:ntoc) ! Replacing m with its value
y(1:n+1)=yi(ntoc-n:ntoc)
并且如果边界是 x
和 y
是 1
和 n+1
,或者数组是可分配的,那么整个数组 x
和y
可以用在左侧。
对于 n
零或负数,数组部分将安全地 select 与循环相同的元素(一个或 none)。
如果你要在该片段之外使用 i
和 l
那么你当然必须手动设置它们(并且不要忘记 i
会取值 ntoc+1
).
最后,如果您想要更多的动力来摆脱该循环:请注意,像这样的非块 do 结构已被 Fortran 2015 删除。