如何删除NSarray中的几个元素

时间:2015-01-26 17:05:28

标签: objective-c nsarray

我有一个包含多个元素的数组。我想在不同索引的一个步骤中删除几个元素(即我想删除从索引0到索引7的元素,同时我还想删除从索引15到索引21的元素。这可能吗?

4 个答案:

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

查找更多信息herehere

答案 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中对此进行过测试,但你得到了一般的想法。

编辑:正如所指出的,一旦删除了一个范围,你就必须动态移动所有其他范围,这样你就不会超出界限。