“声明”和“合并”的内在功能是强大的,在阵列的某些位置上运作,但它们没有将物品移到阵列的前线。 具有明确的索引的旧编码(可并入功能)例如:
k=1
do i=1, n
if (ymiss (i) == 1) then
y(k) = y(i)
k = k + 1
end if
end do
你们想要做的是使用“包装”内在的阵容。 1. 变形成一个逻辑阵列: 页: 1 然后使用诸如(没有第二指数测试):
iii)
添加实例代码,显示“在什么地方”、“在什么地方”和“包装”等固有术语的使用。 “只有”才能解决问题,但“包装”可以解决。 举例来说,我使用了“设计”;-90”作为NaN。 “y (ydim+1:LEN) =-99.0”是禁止化学武器组织要求的吨数,他不需要使用这些元素。
program test1
integer, parameter :: LEN = 6
real, dimension (1:LEN) :: y = [3.0, 1.0, -99.0, 6.0, 2.0, -99.0 ]
real, dimension (1:LEN) :: y2
logical, dimension (1:LEN) :: ymiss
integer :: ydim
y2 = y
write (*, (/ "The input array:" / 6(F6.1) ) ) y
where (y < -90.0)
ymiss = .false.
elsewhere
ymiss = .true.
end where
ydim = count (ymiss)
where (ymiss) y2 = y
write (*, (/ "Masking with where does not rearrange:" / 6(F6.1) ) ) y2
y (1:ydim) = pack (y, ymiss)
y (ydim+1:LEN) = -99.0
write (*, (/ "After using pack, and ""erasing"" the end:" / 6(F6.1) ) ) y
stop
end program test1
产出是:
The input array:
3.0 1.0 -99.0 6.0 2.0 -99.0
Masking with where does not rearrange:
3.0 1.0 -99.0 6.0 2.0 -99.0
After using pack, and "erasing" the end:
3.0 1.0 6.0 2.0 -99.0 -99.0