2014-09-05 6 views
1

동일한 멤버가 4 개인 어레이가 2 개 있다고 가정 해 봅시다. 멤버는 A B C E.입니다. 이제 두 배열을 반복하여 루프가 일치하는지 확인하겠습니다. 이렇게하려면 다음을 수행해야했습니다.내부 및 외부 루프

For i = 1 to ubound(1st_array) 
    For j = 1 to ubound(2nd_array) 
     if 1st_array(i) = 2nd_array(j) then 
     goto Z 
     end if 
    next 
next 

이제는 일치 항목이없는 경우 Excel에서 특정 조합을 중복해서 두 번 확인합니다. 예를 들어, 우리는 다음과 같은 조합

를 확인할 필요가

AB AC AD AE

BC BD는 BE

CD CE

그러나이 기능이 설정되는 방법 제공 Excel은 일부 구성원을 두 번 이상 확인합니다. 또한

BA CB

CA DA DB DC를 확인합니다 그리고 그것은 사람들을 점검 할 필요가 없다. 이것은 4 명의 멤버의 배열을 처리 할 때 커다란 문제는 아니지만 20 명의 멤버로 이루어진 배열을 처리 할 때 문제가됩니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

0

쌍 비교는 대칭입니다. 예를 들어 이미지에는 5 x 5 행렬이 있고 열은 A B C D E이고 행 또한 A B C D E입니다. 아래 삼각형 만 확인하면됩니다.

트릭은 여기에 각각의 내부 루프를 시작하는 것입니다 내가 + 1. 그냥 코드를 조금 수정 :

For i = 1 to ubound(1st_array) 
    For j = i + 1 to ubound(2nd_array) 
     if 1st_array(i) = 2nd_array(j) then 
     goto Z 
     end if 
    next 
next 

파이썬 3 동등한은 다음과 같습니다 출력과

s = ["A", "B", "C", "D", "E"] 

for i in range(len(s)): 
    for j in range(i + 1, len(s)): 
     print (s[i], s[j]) 

:

A B 
A C 
A D 
A E 
B C 
B D 
B E 
C D 
C E 
D E 

위의 코드는 스스로 설명해야합니다. 나는 A로 시작하고, j는 A + 1 = B로 시작하여 CDE로갑니다. 다음에 I가 B 일 때, j는 CDE를 통과하지만 A가 없으므로 BA를 이중으로 체크하지 않아야합니다.

+0

흥미 롭습니다. – user147178

+0

좋은 답변이지만 바깥 쪽 루프는'1 to ubound (1st_array) - 1' 만 필요합니다. –

+0

이것은 언어에 따라 다릅니다. 파이썬과 같은 대부분의 언어, for 루프는 포괄적이지만 오른쪽 배타적입니다. 이 경우, 루프 변수는 상한 -1까지 실행됩니다. – dgg32