2012-10-13 117 views
0

我有一堆循環在plist中爲我找到正確的單詞並將其過濾掉。然而,它非常緩慢,在plist中總共有大約2000個字。看到下面的代碼,我需要加快速度,這會導致大約2-3秒的延遲!不知道我怎麼能。加速嵌套循環?

plist是由大約200個陣列組成的,每個陣列有10個單詞。所以我抓住plist的字典dict。然後遍歷所有這些數組,直到找到我需要的單詞。

for (int i = 0; i < [lang1Words count]; i++) 
    {   
     NSString *errorWordLang1 = [lang1Words objectAtIndex:i]; 

     for (NSArray *a in [dict allValues]) 
     { 
      for (NSString *s in a) 
      { 
       if ([errorWordLang1 isEqualToString:s]) 
       { 
        NSArray *temp = [dict allKeysForObject:a]; 
        NSString *originLang1ArrayKey = [temp objectAtIndex:0]; 
        NSArray *lang1Temp = [self getWordsArrayForKey:originLang1ArrayKey]; 
        NSInteger index = [lang1Temp indexOfObject:errorWordLang1]; 
        NSString *originLang2ArrayKey; 
        if ([languageKey isEqualToString:@"Latin"]) originLang2ArrayKey = [originLang1ArrayKey stringByReplacingOccurrencesOfString:@"Latin" withString:@"English"]; 
        else if ([languageKey isEqualToString:@"English"]) originLang2ArrayKey = [originLang1ArrayKey stringByReplacingOccurrencesOfString:@"English" withString:@"Latin"]; 
        NSArray *lang2Temp = [self getWordsArrayForKey:originLang2ArrayKey]; 
        NSString *errorWordLang2 = [lang2Temp objectAtIndex:index]; 

        if (errorWordLang2 == nil || errorWordLang1 == nil) break; 

        [orderedLang2Words addObject:errorWordLang2]; 
        [orderedLang1Words addObject:errorWordLang1]; 
       } 
      } 
     } 
    } 
+0

如果您包含該plist或詞典的一小部分並說出預期結果,可能會有所幫助。 – DrummerB

+0

一個2000 for循環應該不會影響CPU時間。你有沒有嘗試在代碼段之前和之後添加NSLog? – TheAmateurProgrammer

+0

我看不出有什麼幫助。儘管所有陣列都是我期望的陣列。它可能是2000個字,但是我做了10次,lang1Words可以高達10個。 –

回答

0

您應該使用儀器(具體爲時間檔案儀器)進行檔案分析,然後發佈保存的檔案,我們可以查看並提供建議。沒有探查器的情況下進行優化就像用眼罩瞄準目標。