我应该使用 mutableArray 还是 mutableDictronary?

Should I use mutableArray or mutableDictronary?

我正在尝试填写 muatableArraymutableDictionary。然后我将取出 1 个对象,比如说 4,然后我需要通过从它们的索引中减去 1 来移动超过 4 的所有元素。

这在 mutableArrayremoveObjectAtIndex 中很容易做到。但问题是,我不会向每个索引添加对象。

下面是我的意思的基本布局:

 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];
  }
}
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] 不可能为零。 [myArray objectAtIndex:i] 永远,永远,永远 return 零。