У меня есть изменяемый словарь, из которого я удалил элемент с помощью removeObjectForKey. Это хорошо, но когда я перечисляю через Словарь, есть «дыра» для элемента, который я удалил. Поэтому, когда я печатаю Словарь, он отображает этот элемент как (ноль).
Есть ли способ «упаковать» словарь после удаления элемента? Мне нужны смежные номера для ключей. Пример:
ДО УДАЛЕНИЯ:
key:1 value:red
key:2 value:green
key:3 value:blue
key:4 value:yellow
myDictionary removeObjectForKey:2
CURRENT:
key:1 value:red
key:3 value:blue
key:4 value:yellow
DESIRED:
key:1 value:red
key:**2** value:blue
key:**3** value:yellow
Код для удаления нулевой записи из NSMutableDictionary
. Это то, что я придумал, но это не работает:
int count = dictFaves.count;
int x = 1; // Dictionaries are 1-relative
while ( x <= count ) {
// get the current row
NSString *curRow = [NSString stringWithFormat:@"%d", x];
NSString *temp = [dictFaves objectForKey:curRow];
// is this row empty? if so, we have found our hole to plug
if ( temp == nil ) {
// copy the Fave from the 'next' row to the 'current' row. Effectively
// shifting it 1 lower in the Dictionary
NSString *nextRow = [NSString stringWithFormat:@"%d", x + 1];
temp = [dictFaves objectForKey:nextRow];
[dictFaves setObject:temp forKey:[NSNumber numberWithInt:x]];
// one final thing to cleanup: remove the old 'next' row.
// It has been moved up 1 slot (along with all others)
[dictFaves removeObjectForKey:[NSString stringWithFormat:@"%d", x+1]];
}
x = x + 1;
}