【问题标题】:Remove alternatively couple of items from NSArray从 NSArray 中删除另外几个项目
【发布时间】:2013-02-02 12:18:53
【问题描述】:

这是我从 JSON 解析中简化的 NSMutableArray:

{
main 
{ 
  array0, 
  array1,
  array2,
  array3,    <----- remove!
  array4,    <----- remove!
  array5,
  array6,    <----- remove!
  array7,    <----- remove!
  array8,
  ...,
}
}

我正在寻找交替删除单个数组项的最佳方法,仅示例数组 2、4、6、8; 另外,如果我需要删除数组 3,4 和 6,7 的 COUPLES,总是交替?

编辑:这是第一个解决方案,可选择删除单个项目:

for (int i=0; i < [array count]; i = i+1) {
[array removeObjectAtIndex:i];
}

【问题讨论】:

  • 使用 - (void)removeObjectAtIndex:(NSUInteger)index 和 jenerate index as you want
  • 哦,是的,CRDave,我已经编辑了我的问题,但是如果我只需要删除几个数组,是否可以替代?
  • 如果你想要 1 到 5 并且你知道 pos 静态而不是你可以在没有循环的情况下编写 1 5 语句,这取决于你的逻辑。如果您拥有专利,则可以制作仅运行 M 次的循环,其中 M 是要删除的项目数,因此无需额外运行。但是,如果您没有任何专利并且您正在随机删除(没有任何数学规则),那么您的循环必须运行 N 次,其中 N 是数组计数。

标签: objective-c arrays nsarray range


【解决方案1】:

在我看来,您可以轻松地创建一个包含所有索引的索引集,以使用removeObjectsAtIndexes: 删除和删除这些索引处的对象。

您可以从indexesOfObjectsPassingTest: 获取所有偶数(或奇数)索引对象的索引。

NSMutableArray *array = // Your array where objects should be removed from
NSIndexSet *indexesToRemove = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return idx%2==0; // index is even (even objects get removed)
}];
[array removeObjectsAtIndexes:indexesToRemove];

【讨论】:

  • 谢谢大卫,但 XCode 给出错误:不兼容的指针类型初始化 'NSMutableIndexSet *__strong' 使用类型为 'NSIndexSet *' 的表达式,我们需要 NSIndexSet :)
  • 对不起,应该是普通的NSIndexSet。这就是您不运行代码时会发生的情况。不过,这应该只是一个警告。
  • 当然,我已经编辑过了,但是我们在删除单个 COUPLE 数组时遇到了问题,或者,最好的代码是什么?谢谢!
  • 你试过idx%4&lt;2吗?这对于 0 和 1 应该是正确的,但对于 2 和 3 应该是错误的。然后对于 4 和 5 再次正确,依此类推。
  • 完美,@David,这就是解决方案。再次感谢您!
猜你喜欢
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多