вставить в массив с коротким и умным алгоритмом - PullRequest
0 голосов
/ 22 января 2012

Мне нужно отсортировать мой массив по значениям, которые находятся в определенных позициях, когда остальные из них будут иметь некоторую начальную позицию.способ, которым я это делаю, вероятно, слишком длинный.

у меня есть:

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 не подходит для этого предложения, потому что элементы не симметричны.

спасибо.

1 Ответ

1 голос
/ 22 января 2012

Ближайший API-интерфейс к тому, что вы хотите сделать, это NSMutableArray s:

- (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];

Теперь у вас есть единственное место, где вы определяете свои пары индекс / значение, которые можно легко редактировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...