我有 cpp 代码,其中结构对象被放入CLISTS
. 我正在将此代码移植到 Objective C 中。
.RemoveAt
CLIST 类似于具有, .GetAt
, .InsertBefore
, .GetNext
,.GetHeadPosition
函数的双向链表。
如何在Objective C
. 我需要在Objective C中实现双向链表吗?是否有任何其他预定义的方法可以使用它。
我有 cpp 代码,其中结构对象被放入CLISTS
. 我正在将此代码移植到 Objective C 中。
.RemoveAt
CLIST 类似于具有, .GetAt
, .InsertBefore
, .GetNext
,.GetHeadPosition
函数的双向链表。
如何在Objective C
. 我需要在Objective C中实现双向链表吗?是否有任何其他预定义的方法可以使用它。
一个 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 的类似物,但是您不能在该循环中改变数组,因此它并不总是可用。