然後想要一一比對裡面的東西是否有重複的,
通常最直覺的,是用雙迴圈(巢式)來處理。
比如說在一個容器裡,裝了 6 個物件:
object_length = 6;
for(i=0; i<object_length; i++) {
objA = objAry[i];
for(j=0; j<object_length; j++) {
objB = objAry[j];
if(objA == objB) {
// 比對相同時, 處理的程序
}
}
}
上述作法總共需要執行 6 * 6 = 36 次的比對分析
存在二個問題
1. 應去除掉與自己比對 ?
2. i=1, j=2 比對完後,i=2, j=1 能否不要再比對
不需要與自己比對,所以程式可修正成如下:
object_length = 6;
for(i=0; i<object_length; i++) {
objA = objAry[i];
for(j=0; j<object_length; j++) {
objB = objAry[j];
if(i != j && objA == objB) {
// 比對相同時, 處理的程序
}
}
}
如此一來, 我們已減掉了 6 次的與自己比對, 剩下 30 次的比對
底下是執行的結果
obj0 with obj1, obj2, obj3, obj4, obj5
obj1 with obj0, obj2, obj3, obj4, obj5
obj2 with obj0, obj1, obj3, obj4, obj5
obj3 with obj0, obj1, obj2, obj4, obj5
obj4 with obj0, obj1, obj2, obj3, obj5
obj5 with obj0, obj1, obj2, obj3, obj4
obj0 with obj1 跟 obj1 with obj0 是相同的結果,不需要再重複比對
我們所需要的結果應如下
obj0 with obj1, obj2, obj3, obj4, obj5
obj1 with obj2, obj3, obj4, obj5
obj2 with obj3, obj4, obj5
obj3 with obj4, obj5
obj4 with obj5
obj5 with nothing !!
所以最終的程式修改如下:
object_length = 6;
for(i=0; i<object_length-1; i++) {
objA = objAry[i];
for(j=i+1; j<object_length; j++) {
objB = objAry[j];
if(objA == objB) {
// 比對相同時, 處理的程序
}
}
}
最後程式的比對運算只剩 15 次