我有一个包含多个元素的数组。我想在不同索引的一个步骤中删除几个元素(即我想删除从索引0到索引7的元素,同时我还想删除从索引15到索引21的元素。这可能吗?
答案 0 :(得分:3)
您可以使用NSMutableIndexSet来包含要删除的数组索引。
示例:
创建NSMutableIndexSet:
NSMutableIndexSet *indexes = [NSMutableIndexSet new];
将要删除的数组索引添加到其中:
[indexes addIndex:3];
[indexes addIndexesInRange:NSMakeRange(5, 3)];
这将提供数组索引3,5,6,7
从可变数组中删除索引项:
NSMutableArray *mutableArray = [array mutableCopy];
[mutableArray removeObjectsAtIndexes:indexes];
如果需要: array = [mutableArray copy];
答案 1 :(得分:1)
怎么样:
[array removeObjectsInRange:NSMakeRange(1, 10)];
或
[array removeObjectsAtIndexes:[NSIndexSet indexSetWithIndex:1]];
答案 2 :(得分:0)
您可以使用(void)removeObjectsAtIndexes:(NSIndexSet *)indexes
NSMutableArray
NSArray不可变,也就是说,你无法修改它。你应该服用 看看NSMutableArray。查看“删除对象”部分, 你会发现许多功能可以让你删除项目:
来自:NSArray + remove item from array
另见Removes the objects at the specified indexes from the array
答案 3 :(得分:0)
你看过removeObjectsInRange:
了吗?当然,你必须多次调用它来按顺序删除多个范围,但你可以轻松编写一个可以处理它的类别函数。
- (void)removeObjectsAtRanges:(NSMutableArray *)ranges {
for range in ranges {
[self removeObjectsInRange:range];
}
}
注意:我还没有在xcode中对此进行过测试,但你得到了一般的想法。
编辑:正如所指出的,一旦删除了一个范围,你就必须动态移动所有其他范围,这样你就不会超出界限。