我有cpp代碼,其中struct對象被放入CLISTS
。我移植的代碼爲目的C.目標C中的CLISTs
CLIST類似於雙向鏈表與.RemoveAt
,.GetAt
,.InsertBefore
,.GetNext
,.GetHeadPosition
功能。
如何在Objective C
中實現相同。 我是否需要在目標C中實現雙向鏈表。是否有任何其他預定義的方法來使用它。
我有cpp代碼,其中struct對象被放入CLISTS
。我移植的代碼爲目的C.目標C中的CLISTs
CLIST類似於雙向鏈表與.RemoveAt
,.GetAt
,.InsertBefore
,.GetNext
,.GetHeadPosition
功能。
如何在Objective C
中實現相同。 我是否需要在目標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的模擬,但是你不能在該循環中改變數組,所以它不總是可用的。