我有一個數組數組。我需要將數組中的每個數字與數組中的每個數字進行比較,而不會有任何重複的比較集。例如,需要比較索引0和1處的對象,但不希望稍後通過檢查索引1和索引0處的對象加倍。檢查NSArray中的每一對唯一對象
任何人都可以幫我解決這個問題。這將不勝感激。
我有一個數組數組。我需要將數組中的每個數字與數組中的每個數字進行比較,而不會有任何重複的比較集。例如,需要比較索引0和1處的對象,但不希望稍後通過檢查索引1和索引0處的對象加倍。檢查NSArray中的每一對唯一對象
任何人都可以幫我解決這個問題。這將不勝感激。
我不知道你需要的,因爲有可能是更好的方式來完成任何你正在嘗試做這做什麼,而是你所談到的情況下,你可以做一個簡單:
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
的內循環會阻止您重複進行比較。
這實際上就是我要這樣做的方式,除非我必須找出更好的性能原因。 (儘管注意第一個循環可以比你所在的位置更快地停止一次迭代。)當然,你可以讓第二個循環索引從n-1開始,從第一個循環開始。 –
第一個循環可以去一個循環更少,我幾乎增加了一個'-1',但爲了簡單起見,這樣做幾乎沒有性能損失,因爲在外循環的最後一次迭代中,內循環將立即退出。 – Jsdodgers
是的,我同意這種差異在大多數情況下是微不足道的。 –
您可以遍歷數組,並在每個數字處將其與數組中的下一個數字進行比較。 如果您的數組大小爲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
}
}
不清楚爲什麼這是低調投票,因爲它基本上與Jsdodgers相同。 –
是的,我不知道,我留下了深刻的印象,我多次修改我的答案,以發現他們爲什麼投票給我! –
使用一個NSMutableOrderedSet如果它可以幫助您解決問題。或者使用另一個可變數組,並使用containsObject:
逐個將原始數組中的對象添加到它,以測試您要插入的對象是否會重複。
如果你說爲什麼,你甚至可以得到更好的解決方案。 – Abizern