Как сделать что-то с каждым вторым объектом в NSArray? (IPhone) - PullRequest
0 голосов
/ 16 июля 2011

У меня есть NSArray со многими словарями NS.Я использую for, чтобы пройти через него:

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

 }

Теперь я хочу сделать что-то с каждым вторым объектом массива.Допустим, массив имеет count из 5. Чем он будет что-то делать со вторым, четвертым и пятым объектами.

Как я могу это сделать?

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

РЕДАКТИРОВАТЬ: Каждый второй объект и последний объект, если таковой останется.

Ответы [ 3 ]

7 голосов
/ 16 июля 2011

Вы можете увеличить значение на два при увеличении цикла или умножить на два при обращении к нему.

т.е.:

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]);
}
4 голосов
/ 16 июля 2011

Может быть лучше использовать быстрое перечисление , если вам не нужен индекс:

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

Когда odd инициализируется, перед циклом рассмотрите неявный индекс(i в традиционном для цикла), чтобы быть -1.(Это нечетное число.) На первой итерации цикла индекс увеличивается до 0, а флаг odd меняется на четный (NO).Флаг не является нечетным, поэтому мы запускаем эту итерацию (индекс 0, 1-й элемент).Следующая итерация увеличивает индекс до 1 (2-й элемент), а флаг инвертируется в нечетный.Поскольку флаг нечетный, мы пропускаем эту итерацию.Выполнение продолжается до конца массива.

Редактировать: Традиционный цикл for с индексом чище, если вы всегда хотите работать с последним элементом.Чтобы сделать это здесь, вам нужно будет отслеживать индекс вручную или повторять содержимое цикла после цикла.

0 голосов
/ 16 июля 2011

Используйте оператор по модулю:

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

По модулю возвращается остаток от деления i / 2.Так что, если я равен 0 ( первый элемент ), это равно 0 (== false ).Если я равен 1 ( второй элемент ), это равно 1 (== true ).

Чтобы получить ваш последний элемент, я добавил условие (i == [myArray count] - 1).

...