查找 Fortran 数组中的第一个和最后一个正值

bob*_*nto 1 arrays fortran

我有一个整数数组。其中一些值为零,至少一些值大于零。我想找到数组中第一个和最后一个正值的位置。当然,这可以通过循环来完成。但是对于现代 Fortran 数组功能,我认为一定有更紧凑和优雅的东西。但我什么也没发生。有人知道有什么好方法吗?

use*_*492 5

我被迫回答,因为现有的答案是巴洛克式的且不正确的。我的答案基于 FINDLOC 使用 LOGICAL ARRAY= 和 VALUE= 参数的事实:

program find
   integer, allocatable :: data(:)
   data = [-3, 3, 2, 0, -2]
   write(*,'(*(g0))') 'First Positive = ',findloc(data > 0, .TRUE.)
   write(*,'(*(g0))') 'Last Positive = ',findloc(data > 0, .TRUE., BACK = .TRUE.)
   write(*,*) findloc(sign(1, data), 1)
   write(*,*) findloc(sign(1, data), 1, back=.true.)
end program find
Run Code Online (Sandbox Code Playgroud)

来自equation.com的gcc版本9.0.0 20181125(实验)(GCC)的输出:

First Positive = 2
Last Positive = 3
           2
           4
Run Code Online (Sandbox Code Playgroud)

请注意,如果参数 B= 为零,则 SIGN 内在函数会给出误报。