内部和外部环路

比方说,我有两个数组,其中4个是相同的成员。 成员是ABC 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个成员的数组时,这是一个问题。 我如何解决这个问题?

成对比较是对称的。 对于你的例子,图像有一个5×5的matrix,列是ABCDE,行也是ABCDE,你只需要检查下面的三angular形。

这里的诀窍是用i + 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 

一个python 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]) 

输出:

 AB AC AD AE BC BD BE CD CE DE 

上面的代码应该是自我解释的。 我从A开始,j从A + 1 = B开始并沿着CDE下降。 下次我是B的时候,j只会经过CDE而没有A,所以我们避免了双重检查BA。