[英]Using Fortran IF construct to find matching values between two arrays
在繼續執行代碼之前,我需要使用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:分段錯誤-無效的存儲器參考。 | |此錯誤的回溯跟蹤:|#0 ffffffffffffffffff | ~~~~~~~~~~~~~~~~~~~
您的示例中有太多無關緊要的變量,而同時卻沒有提供給我們正確評估所需信息的信息。
如果只想檢查大小可能不相等的兩個數組A
和B
是否共享至少一個元素,則可以使用此構造:
any([(any(A(i) == B), i = 1, size(A))])
讓我們進入細節:
any(A(i) == B)
這將檢查A
第i
個元素是否在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.