КЛИСТЫ в Цели C

У меня есть код cpp, где объекты структуры помещаются в CLISTS, Я портирую этот код в цель C.

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

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

1 ответ

CLIST предположительно круговой? Следовательно 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, но вы не можете изменить массив во время этого цикла, поэтому его не всегда можно использовать.

Другие вопросы по тегам