2015-04-07 2 views
0

Я пытаюсь заполнить muatableArray или mutableDictionary. Затем я вынесу 1 объект, скажем 4, тогда мне понадобятся все элементы за пределами 4, вытеснив 1 из их индекса.Должен ли я использовать mutableArray или mutableDictronary?

Это легко сделать в mutableArray с removeObjectAtIndex. Но проблема в том, что я не буду добавлять объекты к каждому индексу.

Вот основная схема того, что я имею в виду:

1. one 
2. two 
3. three 
// 4. (Empty) 
5. five 
6. six 
// 7. (Empty) 
// 8. (Empty) 
9. nine 
10. ten 

Так что мой вопрос, я должен использовать mutableaArray, и просто добавить nulls в пустые индексирует как это:

for (int i = 0 ; i < [myArray count]; i++) 
{ 
    if (![myArray objectAtIndex:i]) { 
     [array addObject:[NSNull null]]; 
    } 
} 

Или я должен использовать mutableDictionary, и когда мне нужно удалить объект, я должен просто сделать все это вручную:

[self.myDict removeObjectForKey:currentKey]; 
for (NSNumber *key in [[self.myDict allKeys] sortedArrayUsingSelector:@selector(compare:)]) { 
    if ([key integerValue] > currentKey) { 
    NSNumber *newKey = @([key integerValue]-1); 
    self.myDict[newKey] = self.myDict[key]; 
    [self.myDict removeObjectForKey:key]; 
    } 
} 

ответ

1
for (int i = 0 ; i < [myArray count]; i++) 
{ 
    if (![myArray objectAtIndex:i]) { 
     [array addObject:[NSNull null]]; 
    } 
} 

Во-первых, вы не включаете все предупреждения, которые вы должны включить. В качестве доказательства я считаю, что вы используете int i, а не NSUInteger i. Это очень плохая привычка. Включение предупреждений - очень дешевый и эффективный метод поиска ошибок программирования.

Во-вторых, не используйте! чтобы проверить, равен ли указатель нулю. Сделайте приличную вещь и сравните ее с нолем. Вы хотите проверить, что это нуль, так вот что вы должны написать в своем коде. Написание кода таким образом, чтобы оно отражало то, что вы хотите сделать, - очень дешевый и эффективный метод, чтобы избежать ошибок программирования.

В-третьих, этот код абсолютно бессмыслен. Если i < myArray.count, то [myArray objectAtIndex: i] не может быть nil. [myArray objectAtIndex: i] никогда, никогда, не вернет нуль.

+0

Спасибо за исправления! Действительно ценю это!! Так вы предлагаете использовать mutableArray вместо mutableDictionary? –

Смежные вопросы