2013-08-25 17 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:逐个将原始数组中的对象添加到它,以测试您要插入的对象是否会重复。