我有一个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
}
编辑:每一个第二个对象和最后一个对象(如果有的话)......
答案 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)
条件。