我想解析一个NSMutableArray
,当我找到一些响应某些条件的对象时,我想将它们从数组中删除。
如果没有两个(或更多)数组,我怎么能这样做呢?
对于那些想要说:嘿,只是不可能解析并从阵列中删除对象,我只能说,当我解析一个抽屉,我想从中删除过时的药物时,我不会有问题要做...当我找到一个,我把它丢弃,然后我找下一个药箱检查。我不需要第二个抽屉。
答案 0 :(得分:6)
当我需要从可变数组中删除对象时,我使用了向后循环。
for (NSInteger i = arrayCount - 1; i >= 0; i--) {
// remove is OK here
}
答案 1 :(得分:2)
如果您有2个阵列。两种类型NSMUtableArray
。你可以简单地做 -
[mainArray removeObjectsInArray:toRemoveObjects];
答案 2 :(得分:1)
我会将您要保留的对象复制到一个新的可变数组中,然后将旧数组分配给新数组。
答案 3 :(得分:0)
for( NSUInter i = 0, j = 0; i < array.count; i++ )
{
if( test )
[array removeObjectAtIndex:j];
else
j++;
}
以下是您可以运行的命令行版本中的代码,并自行测试它会删除每个奇数
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSMutableArray * array = [NSMutableArray array];
for( NSUInteger i = 0; i < 20; i++ )
[array addObject:[NSNumber numberWithInteger:random()%100]];
NSLog( @"%@", array );
for( NSUInteger i = 0, j = 0; i < array.count; i++ )
{
if( [[array objectAtIndex:j] unsignedIntegerValue] & 1 )
[array removeObjectAtIndex:j];
else
j++;
}
NSLog( @"%@", array );
[pool drain];
return 0;
}
答案 4 :(得分:0)
如果您一次验证一个对象,则可以改为使用它:
[mainArray removeObject:objectToRemove];
答案 5 :(得分:0)
我找到了一个超级优雅的解决方案,可以使用2个数组,但是这可以防止在许多情况下进行解析循环;
NSArray* matchingItems = [mainArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@" attributetockeck MATCHES[cd] %@ ", attributevalue]];
[mainArray removeObjectsInArray:matchingItems];