Ограничения в Objective C

#objective-c #clist

#objective-c #клист

Вопрос:

У меня есть cpp-код, в котором объекты struct помещаются в CLISTS . Я переношу этот код в Objective C.

CLIST похож на двусвязный список с .RemoveAt , .GetAt , .InsertBefore .GetNext , .GetHeadPosition , функциями. ,,,,,,,,,,,.

Как реализовать то же самое в Objective C . Нужно ли мне реализовывать двусвязный список в Objective C.Is есть какие-либо другие предопределенные методы для его использования.

Ответ №1:

Предположительно, КЛИСТ является циклическим? Отсюда GetHeadPosition ?

В любом случае, NSArray (или, NSMutableArray в данном случае, поскольку вы хотите выполнять вставку) это обычный способ сохранения упорядоченных списков в Objective-C.

Для RemoveAt используйте removeObjectAtIndex: . Для GetAt используйте objectAtIndex: . Для InsertBefore вы, вероятно, захотите написать что-то вроде:

 - (void)insert:(id)objectToInsert before:(id)referenceObject
{
    int index = [array indexOfObject:referenceObject];

    if(index == NSNotFound) return; // or whatever you'd expect. 
                                    // Maybe object is just inserted at the end?

    index = index - 1;
    if(index < 0) index = [array count];
    [array insertObject:objectToInsert atIndex:index];
}
  

(что, вероятно, было бы лучше в категории NSArray, но вы поняли суть)

Для GetNext и GetHeadPosition вы, вероятно, захотите сохранить позицию вашего массива в отдельной переменной. Итак, для GetNext:

 arrayPosition = (arrayPosition   1)%[array count];
return [array objectAtIndex:arrayPosition];
  

И для GetHeadPosition просто:

 return arrayPosition;
  

РЕДАКТИРОВАТЬ: для перебора NSArray самый простой способ на самом деле — игнорировать что-либо явное и просто использовать:

 for(ObjectType *object in array)
{
     /* do something with object */
}
  

Обычно это означает, что вам на самом деле не нужен аналог GetNext, но вы не можете изменять массив во время выполнения этого цикла, поэтому его не всегда можно использовать.