2011-11-27 78 views
1
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顯示「第一」和「第二」,但不是「未找到」。怎麼來的?ios我的簡單循環出了什麼問題?

+0

「還沒找到」 - 我被這個說法弄糊塗了。你的問題是,即使在第一個和第二個匹配的字符串中,你的'dup'數組永遠不會結束任何條目? –

+0

我比較newsmall的字符串與newbig的字符串,如果它與newbig的任何字符串都不匹配,我想從newsmall保存字符串。 – wagashi

+0

@ michael實際上這兩個數組是相同的,除了在newbig最後有一些額外的字符串。 – wagashi

回答

3

哦,duhhhhh。我現在明白你的問題。

顛倒數組的比較順序。如果你想查找newbig中哪些字符串不存在於newsmall中,請首先遍歷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]; 
    } 
} 

看到細微的差別?如下方法:

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

此外,轉換newsmall到的NSSet將增加速度

+0

你是對的!感謝您的快速幫助! – wagashi

+0

我很高興能夠幫助你! –

+0

恩,我現在測試過了,它不起作用。我用hasPrefix替換了isEqualToString:它有關係嗎?它顯示了newbig的所有「noDup」,但沒有顯示「dup」。我必須在我的腦海裏霧濛濛的...... – wagashi

0

你的內環可以用containsObject代替。

+0

恩,這不適用於我的情況。 – wagashi