第一次发布在这里,我有一个(可能非常简单)的问题。
我想根据另一个数组(B)中的相应值分配一个数组(A)中的元素值,例如,如果A(1)= 2则将4分配给B(1)。
我想象这将使用DO循环和一些if语句来实现。然而,我使用的If staments似乎在那时引用了循环索引而不是特定元素。
有人能指出我正确的方向吗?
答案 0 :(得分:2)
您还可以尝试使用merge
构建一个构造... merge
使用掩码从两个现有数组构造一个新数组,以选择正确的值:
program test
integer,parameter :: LENGTH=5
integer :: A(LENGTH)
integer :: B(LENGTH)
real :: R(LENGTH)
integer :: i
call random_number(R)
A = int( R*3 )
B = [ ( i,i=1,LENGTH) ]
print *,'A:',A
print *,'B:',B
B = merge( 4, B, A == 2 )
print *,'B:',B
end program
输出:
A: 2 1 2 2 1
B: 1 2 3 4 5
B: 4 2 4 4 5
说明:
B = merge( 4, B, A == 2 )
A == 2
构建一个临时逻辑数组.true.
i
如果A(i) == 2
4
是一个与B
merge
,则4
会从.true.
中选择值,否则会从B
中选择相应的值。 B
(=
)答案 1 :(得分:1)
您可以使用屏蔽数组分配。给定两个数组A
和B
,具有相同的形状(即相同数量的排名,每个维度中的大小相同),并且如果要将B
的元素设置为4,其中A
的相应元素等于2
,您只需编写
where(A==2) B = 4
where
与elsewhere
合作,而非if
和else if
,并且还有end where
。有关详细信息,请参阅您最喜欢的文档。
如果您无法用where
表达您的操作,您可能(如果您有最新的编译器)对do concurrent
构造感兴趣。并且,如果所有其他方法都失败了,那么有一些老式的do
和if
可以依赖。