Cocoa - 在解析NSMutableArray时删除/删除项目

时间:2011-08-12 08:59:53

标签: iphone cocoa parsing nsmutablearray

我想解析一个NSMutableArray,当我找到一些响应某些条件的对象时,我想将它们从数组中删除。

如果没有两个(或更多)数组,我怎么能这样做呢?

对于那些想要说:嘿,只是不可能解析并从阵列中删除对象,我只能说,当我解析一个抽屉,我想从中删除过时的药物时,我不会有问题要做...当我找到一个,我把它丢弃,然后我找下一个药箱检查。我不需要第二个抽屉。

6 个答案:

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