2011-05-16 56 views
0

我有cpp代碼,其中struct對象被放入CLISTS。我移植的代碼爲目的C.目標C中的CLISTs

CLIST類似於雙向鏈表與.RemoveAt.GetAt.InsertBefore.GetNext.GetHeadPosition功能。

如何在Objective C中實現相同。 我是否需要在目標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類,但你明白了吧)

對於GetNextGetHeadPosition你可能想要保持陣列位置在一個單獨的變量中。因此,對於的GetNext:

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

而對於GetHeadPosition,只是:

return arrayPosition; 

編輯:通過一個NSArray迭代,最簡單的方法其實是忽略任何明確的,只是使用:

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

這通常意味着你並不真的需要GetNext的模擬,但是你不能在該循環中改變數組,所以它不總是可用的。