0

我有 cpp 代码,其中结构对象被放入CLISTS. 我正在将此代码移植到 Objective C 中。

.RemoveAtCLIST 类似于具有, .GetAt, .InsertBefore, .GetNext,.GetHeadPosition函数的双向链表。

如何在Objective C. 我需要在Objective C中实现双向链表吗?是否有任何其他预定义的方法可以使用它。

4

1 回答 1

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 的类似物,但是您不能在该循环中改变数组,因此它并不总是可用。

于 2011-05-16T14:41:22.680 回答