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
)而不是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];
【讨论】:
以上是关于NSMutableArray - 在删除时禁用重新索引的主要内容,如果未能解决你的问题,请参考以下文章
PHPStorm 重新格式化 - 如何禁用删除空行中的空格?
如何在 NSMutableArray 中迭代时删除 NSDictionary [重复]