3

例如我有数组:

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

数组看起来像这样:

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

然后我删除索引 0 处的对象

[array removeObjectAtIndex:0];

...和 ​​NSMutableArray 自动重新索引数组,所以数组看起来像这样:

0 => @2
1 => @3

问题:是否可以在删除时禁用自动数组重新索引?或者是否有类似的类可以代替 NSMutableArray?谢谢。

4

2 回答 2

4

您不能有不连续的索引,因此您最好的机会是使用占位符对象来替换已删除的索引。就像是

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

现在你将拥有

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

因此保留了非空对象的索引。

于 2013-08-22T15:10:51.830 回答
2

不,您实际上不能从 a 中删除对象NSMutableArray并且没有更新索引。NSMutableDictionary但是您可以使用 a (您使用 a key(可以是 a NSNumber)而不是 a 的NSUInteger数字索引)来实现所需的效果NSMutableArray

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

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

[dictionary removeObjectForKey:@0];

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

产量:

前: {
    0 = 1;
    1 = 2;
    2 = 3;
}
后: {
    1 = 2;
    2 = 3;
}

因此,而不是:

NSNumber *number = [array objectAtIndex:0];

你会使用:

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

或者,而不是:

NSNumber *number = array[0];

你会使用:

NSNumber *number = dictionary[@0];
于 2013-08-22T15:08:28.680 回答