2012-01-22 53 views
0

我需要使用處於特定位置的值對我的數組進行排序,而其餘部分將具有某個初始位置。 我這樣做的方式可能太長了。用簡短而智能的算法插入到一個數組中

我有:

for(int i=0;i<100;i++) 
     [whatBondInFrame addObject:@"no"]; 



     [whatBondInFrame insertObject:@"red" atIndex:0]; 
     [whatBondInFrame insertObject:@"red" atIndex:1]; 
     [whatBondInFrame insertObject:@"red" atIndex:2]; 
     [whatBondInFrame insertObject:@"gray" atIndex:10]; 
     [whatBondInFrame insertObject:@"gray" atIndex:11]; 
     [whatBondInFrame insertObject:@"gray" atIndex:12]; 
     [whatBondInFrame insertObject:@"red" atIndex:20]; 
     [whatBondInFrame insertObject:@"red" atIndex:21]; 
     [whatBondInFrame insertObject:@"red" atIndex:22]; 

它的工作,但如果我想將更多的,我會需要更多的線路。 現在如果我使用這樣的事情:

whatBondInFrame = [NSArray arrayWithObjects: @"Red", @"Green", @"Blue", @"Yellow", nil]; 

它將抹去一切我有,在這裏我不能把他們在正確的索引。

有另一種API把對象的指數在1號線(如本但指標?)

for循環,不利於這一提議引起元素不是對稱的。

謝謝。

+3

你的問題並不清楚:我不明白你是否想對數組進行排序或者只是將特定的對象放在特定的位置。你的目標是什麼? – Saphrosit

+0

@Saphrosit @Saphrosit我的目標是創建一個由100個索引組成的數組,每個索引在開始時都具有@「no」值,然後,我只想將某些索引更改爲我需要的值,但要做那在一行中。 – Curnelious

+0

1)要更改條目,請使用[replaceObjectAtIndex:withIndex:](http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#// apple_ref/OCC/instm/NSMutableArray裏/ replaceObjectAtIndex:withObject :)。 2)我仍然不明白你的意思*「但是要做到這一點。」*請詳細解釋。舉個例子或者其他的東西。 – DarkDust

回答

1

最接近的API,你想要做的是NSMutableArray的:

- (void)replaceObjectsAtIndexes:(NSIndexSet *)indexes withObjects:(NSArray *)objects 

但是沒有‘一條線’的方法將不相交指數集創建NSIndexSet

您是否真的擔心「一行」(如果是這樣,爲什麼?),還是維持一組常量索引/值對來輕鬆插入?如果是後者,你可以使用類似:

typedef struct { NSUInteger index, NSString *value } IndexValue; 

IndexValue entries[] = { {0, @"red"}, {10, @"gray}, ... }; 

int count = sizeof(entries)/sizeof(IndexValue); // number of elements in the array 
for(int ix = 0; ix < count; ix++) 
    [whatBondInFrame replaceObjectAtIndex:entries[ix].index withObject:entries[ix].value]; 

現在,你有你定義的索引/值對一個地方,可以很容易地進行編輯。

相關問題