如何对NSArray中的每个第二个对象执行某些操作? (苹果手机)

时间:2011-07-15 21:58:29

标签: iphone object loops for-loop nsarray

我有一个NSArray,有许多NSDictionaries。我正在使用for来遍历它:

for (int i = 0; i < [myArray count]; i++) {

 }

现在我想对数组的每个第二个对象做一些事情。假设数组的 计数 为5.它将对第2,第4和第5个对象执行某些操作。

我该怎么做?

for (int i = 0; i < [myArray count]; i++) {
           if //check if it is the second object 
     }

编辑:每一个第二个对象和最后一个对象(如果有的话)......

3 个答案:

答案 0 :(得分:7)

您可以在循环增量期间递增2或在访问时乘以2。

即:

for (int i = 0; i < [myArray count]; i += 2) {
  doStuff([myArray objectAtIndex:i]);
}

for (int i = 0; i < [myArray count]/2; i++) {
   doStuff([myArray objectAtIndex:i*2]);
}

答案 1 :(得分:4)

如果您不需要索引,可能最好使用fast enumeration

BOOL odd = YES; 
for (id obj in ary) {
    odd = !odd;
    if (odd) continue;
    // do stuff
}

初始化odd时,在循环之前,将隐式索引(传统for循环中的i)视为-1。 (这是一个奇数。)在循环的第一次迭代中,索引递增为0,odd标志翻转为偶数(NO)。标志不是奇数,所以我们运行这个迭代(索引0,第一个元素)。下一次迭代将索引增加到1(第二个元素),并将标志反转为奇数。由于标志是奇数,我们跳过此迭代。执行继续这样,直到数组结束。

编辑:如果您总是希望对最后一个元素进行操作,那么带索引的传统for循环就更清晰了。要在此处执行此操作,您需要手动跟踪索引或在循环后重复循环内容。

答案 2 :(得分:0)

使用模运算符:

if (i % 2 || (i == [myArray count] - 1)) {
    // do stuff
}

模数返回除法的剩余部分i / 2 因此,如果我为0(第一项),则为0(== false )。
如果我是1(第二项),则为1(== true )。

要获取最后一个元素,我添加了(i == [myArray count] - 1)条件。