我的简单循环有什么问题?

时间:2011-11-27 13:41:27

标签: objective-c ios for-loop

NSMutableArray *noDup = [[NSMutableArray alloc]init];
NSMutableArray *dup = [[NSMutableArray alloc]init];

for (NSString *first in newsmall)
{
    BOOL hasfound = NO;
    //NSLog (@"first %@", first);

    for (NSString *second in newbig) 
    {
        //NSLog (@"second %@", second);
        if ([second isEqualToString:first])
        {
            [dup addObject:first];
            hasfound = YES;
            break;
        }
    }

    if (!hasfound)
    {
        //NSLog (@"has not found %@", first);
        [noDup addObject:first];
    }
}

newsmall是一个只有字符串的小数组,newbig是一个只有字符串的大数组。该应用程序关闭自己没有任何调试警告。 NSLog显示“第一”和“第二”,但没有“未找到”。怎么样?

2 个答案:

答案 0 :(得分:3)

哦,duhhhhh。我现在明白你的问题。

颠倒阵列的比较顺序。如果你想在newsmall中找不到newbig中的哪些字符串,请先查看newbig,同时查看newsbll中newbig中存在哪个枚举字。

代码看起来像这样(只有两行代码已经改变):

NSMutableArray *noDup = [[NSMutableArray alloc]init];
NSMutableArray *dup = [[NSMutableArray alloc]init];

for (NSString *first in newbig)
{
    BOOL hasfound = NO;
    //NSLog (@"first %@", first);

    for (NSString *second in newsmall) 
    {
        //NSLog (@"second %@", second);
        if ([second isEqualToString:first])
        {
            [dup addObject:first];
            hasfound = YES;
            break;
        }
    }

    if (!hasfound)
    {
        //NSLog (@"has not found %@", first);
        [noDup addObject:first];
    }
}

看到细微差别?

答案 1 :(得分:0)

你的内部循环可以用containsObject:方法替换,如下所示:

for (NSString *first in newbig) {
    if ([newsmall containsObject:first]) {
        [dup addObject:first];
    } else {
        [noDup addObject:first];
    }
}

此外,将newsmall转换为NSSet将提高速度。