Objective-c有一个内置的列表迭代器,通过'for(a in b)语法,可以很好地与NSArray和其他集合一起使用.但是有没有可能在这样的迭代过程中删除项目而没有丑陋的技巧
for( int i = 0, i < [array count]; i ++ )
{
if( condition )
{
[array removeItemAtIndex : i];
i --;
}
}
Run Code Online (Sandbox Code Playgroud)
Vla*_*mir 14
您可以按相反顺序迭代数组,这样您就不需要额外调整索引:
for( int i = [array count]-1; i >=0; --i)
{
if( condition )
{
[array removeItemAtIndex : i];
}
}
Run Code Online (Sandbox Code Playgroud)
或者在枚举时累积要在indexset中删除的索引,然后一次删除所有元素:
NSMutableIndexSet *indexes = [[NSMutableIndexSet alloc] init];
for( int i = 0, i < [array count]; i ++ )
{
if( condition )
{
[indexes addIndex : i];
}
}
[array removeObjectsAtIndexes:indexes];
[indexes release];
Run Code Online (Sandbox Code Playgroud)
我会选择第二个选项,因为在枚举时更改数组可能不是一个好的样式(虽然在这种特殊情况下它不会给你错误)
| 归档时间: |
|
| 查看次数: |
2452 次 |
| 最近记录: |