NSMutableArray - 在删除时禁用重新索引

Posted

技术标签:

【中文标题】NSMutableArray - 在删除时禁用重新索引【英文标题】:NSMutableArray - disable reindexing on remove 【发布时间】:2013-08-22 14:54:54 【问题描述】:

例如我有数组:

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

数组如下所示:

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

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

[array removeObjectAtIndex:0];

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

0 => @2
1 => @3

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

【问题讨论】:

@Rob 为什么这不是一个答案:)? 你想要什么而不是重新索引?也许在删除索引处插入“[NSNull null]”而不是删除对象。 谢谢。我认为 [NSNull null] 将是解决方案。 【参考方案1】:

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

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

现在你将拥有

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

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

【讨论】:

【参考方案2】:

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

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];

【讨论】:

以上是关于NSMutableArray - 在删除时禁用重新索引的主要内容,如果未能解决你的问题,请参考以下文章

PHPStorm 重新格式化 - 如何禁用删除空行中的空格?

从 NSMutableArray 中删除对象时崩溃

如何在 NSMutableArray 中迭代时删除 NSDictionary [重复]

NSMutablearray 崩溃删除对象

Woocommerce:如何在应用/删除优惠券时禁用 AJAX?

从 NSMutableArray xcode 中删除对象