2013-08-22 3 views
3

К примеру у меня есть массив:NSMutableArray - отключить индексирование Вытащите

NSMutableArray *array = [NSMutableArray arrayWithObjects:@1, @2, @3, nil]; 

массив выглядит следующим образом:

0 => @1 
1 => @2 
2 => @3 

Тогда я удалить объект с индексом 0

[array removeObjectAtIndex:0]; 

.. .and NSMutableArray автоматически переиндексирует массив, поэтому массив выглядит так:

0 => @2 
1 => @3 

Вопрос: Можно ли отключить автоматический повторный поиск массива при удалении? Или есть аналогичный класс для использования вместо NSMutableArray? Благодарю.

+0

@Rob почему это не ответ :)? –

+3

Что вы хотите вместо переиндексации? Возможно, добавьте '[NSNull null]' в индекс удаления вместо удаления объекта. – Kirsteins

+0

Спасибо. Я думаю, что [NSNull null] будет решением. – user1518183

ответ

4

Вы не можете иметь разрывные индексы, поэтому ваш лучший шанс использовать объект-заполнитель для замены снятую один. Что-то вроде

NSMutableArray *array = [NSMutableArray arrayWithObjects:@1, @2, @3, nil]; 
[array replaceObjectAtIndex:0 withObject:[NSNull null]]; 

Теперь вы будете иметь

0 => [NSNull null] 
1 => @2 
2 => @3 

так сохраняется индексация ненулевых объектов.

2

Нет, вы не можете удалить объект с NSMutableArray и не обновлять индекс. Но вы можете достичь желаемого эффекта с помощью NSMutableDictionary (где вы используете key (который может быть NSNumber), а не NSUInteger числовой индекс NSMutableArray).

NSMutableDictionary *dictionary = [@{@0 : @1, 
            @1 : @2, 
            @2 : @3} mutableCopy]; 

NSLog(@"before: %@", dictionary); 

[dictionary removeObjectForKey:@0]; 

NSLog(@"after: %@", dictionary); 

Уступая:

 
before: { 
    0 = 1; 
    1 = 2; 
    2 = 3; 
} 
after: { 
    1 = 2; 
    2 = 3; 
} 

Таким образом, вместо того, чтобы:

NSNumber *number = [array objectAtIndex:0]; 

Вы хотите использовать:

NSNumber *number = [dictionary objectForKey:@0]; 

Или, вместо того, чтобы:

NSNumber *number = array[0]; 

Вы хотите использовать:

NSNumber *number = dictionary[@0]; 
Смежные вопросы