2013-08-25 41 views
1

我有一個數組數組。我需要將數組中的每個數字與數組中的每個數字進行比較,而不會有任何重複的比較集。例如,需要比較索引0和1處的對象,但不希望稍後通過檢查索引1和索引0處的對象加倍。檢查NSArray中的每一對唯一對象

任何人都可以幫我解決這個問題。這將不勝感激。

+0

如果你說爲什麼,你甚至可以得到更好的解決方案。 – Abizern

回答

5

我不知道你需要的,因爲有可能是更好的方式來完成任何你正在嘗試做這做什麼,而是你所談到的情況下,你可以做一個簡單:

for (int n=0;n<[array count];n++) { 
    for (int m=n+1;m<[array count];m++) { 
     //check your array based on objects at index n and m; 
    } 
} 

這只是從頭到尾循環遍歷數組,並且對於每個對象循環遍歷每個對象,然後您可以比較它們或執行任何操作。啓動n+1而不是0的內循環會阻止您重複進行比較。

+0

這實際上就是我要這樣做的方式,除非我必須找出更好的性能原因。 (儘管注意第一個循環可以比你所在的位置更快地停止一次迭代。)當然,你可以讓第二個循環索引從n-1開始,從第一個循環開始。 –

+0

第一個循環可以去一個循環更少,我幾乎增加了一個'-1',但爲了簡單起見,這樣做幾乎沒有性能損失,因爲在外循環的最後一次迭代中,內循環將立即退出。 – Jsdodgers

+0

是的,我同意這種差異在大多數情況下是微不足道的。 –

0

您可以遍歷數組,並在每個數字處將其與數組中的下一個數字進行比較。 如果您的數組大小爲5,則在arr [2]中將其與arr [3],arr [4]進行比較。

psudo代碼:

NSArray *arr; 
for(int i = 0; i < arr.count ; i++) 
{ 
    NSNumber *num1 = [arr objectAtIndex:i]; 
    for(int j = i + 1; j < arr.count; j++) 
    { 
     NSNumber *num2 = [arr objectAtIndex:j]; 
     //compare here num1 with num2 
    } 
} 
+0

不清楚爲什麼這是低調投票,因爲它基本上與Jsdodgers相同。 –

+0

是的,我不知道,我留下了深刻的印象,我多次修改我的答案,以發現他們爲什麼投票給我! –

2

使用一個NSMutableOrderedSet如果它可以幫助您解決問題。或者使用另一個可變數組,並使用containsObject:逐個將原始數組中的對象添加到它,以測試您要插入的對象是否會重複。