在继续执行代码之前,我需要使用IF
条件来确定数组中的整数(A
)是否与另一个数组(B
)中的整数匹配。这些数组长度不等,包含唯一的值,这些值都是正数。
我知道我可以使用以下方法找到匹配的值:
DO I = 1,SIZE(A)
Match(J)=(ANY(A(I)==B))
但是IF...THEN
构造不接受此格式。我还没有找到一种方法来实现它在线和一般测试。我在这里缺少什么?
编辑: 作为替代方案,我尝试了以下代码:
INTEGER :: I , K, B(900),C(900),I1,ID3, IP
INTEGER, INTENT(IN) :: A, N
OPEN(12,FILE='../B.dat')
DO I=1,817
READ(12,*)B(I),C(I)
END DO
DO I = 1,SIZE(A)
DO K = 1,SIZE(B)
IF (I.EQ.K) THEN
DO IP = N-9,N
ID3 = I1 +A*(IP-1)
END DO
END DO
END DO
然而,K会在整个循环中发生变化,因此代码不适用于匹配。然后我尝试了:
DO I = 1, SIZE(A)
I1 =ID(I)
DO IP = N-9,N
ID3 = I1 +A*(IP-1)
END DO
但是我收到了分段错误:
_____________ runcode :: main :: | runCode:无法运行| C:\ TELEMAC \ VEG \ May \ PRIVEtest.cas_2018-05-02-16h57min04s \ out_testMedit.exe | ~~~~~~~~~~~~~~~~~~ |程序接收信号SIGSEGV:分割 错误 - 无效的记忆参考。 | | Backtrace出现此错误: |#0 ffffffffffffffff | ~~~~~~~~~~~~~~~~~~
答案 0 :(得分:3)
您的示例中包含太多无关变量,同时未向我们提供正确评估您所需内容的信息。
如果您只想检查两个可能大小不等的数组A
和B
是否共享至少一个元素,那么您可以使用此结构:
any([(any(A(i) == B), i = 1, size(A))])
让我们进入细节:
any(A(i) == B)
这会检查i
的{{1}}元素是否在A
中的任何位置。返回一个逻辑。然后,我为B
的所有元素创建了一个临时数组:
A
然后只需在[(any(A(i) == B), i = 1, size(A))]
周围添加any()
,您就可以在IF
语句中使用它:
program my_any
implicit none
integer :: A(3), B(4), i
A = [1, 2, 3]
B = [6, 3, 4, 10]
if (any([(any(A(i) == B), i=1, size(A))])) then
print *, "YES"
else
print *, "NO"
end if
end program my_any