У меня есть Mutable Dictionary, из которого я удалил элемент с помощью removeObjectForKey. Это нормально, но когда я перечисляю словарь, есть «дыра» для элемента, который я удалил. Поэтому, когда я печатаю словарь, он отображает этот элемент как (null).Как удалить нулевые записи из NSMutableDictionary
Есть ли способ «упаковать» словарь после удаления элемента? Мне нужны смежные номера для ключей. Пример:
ПЕРЕД УДАЛИТЬ:
key:1 value:red
key:2 value:green
key:3 value:blue
key:4 value:yellow
myDictionary removeObjectForKey:2
ТОК:
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;
}
Боюсь, я слишком далеко от дизайна, чтобы перейти в NSMutableArray. Плохое планирование. Мне не нужны индексы для запуска последовательно - я был бы счастлив, если бы смог удалить отверстие в Словаре, созданном путем удаления записи. Я добавил код выше, чтобы сделать это, но он не работает ... – Bassman
@Bassman: О какой дыре вы говорите? Я думал, что «дыра» - это способ сказать «цифры не последовательны». – Chuck
Если вы не хотите использовать изменяемый массив, то вам нужно перебирать словарь и вручную устанавливать ключи в соответствии с вашими требованиями. – Alexander