2012-10-13 5 views
0

나는 나를 위해 plist에 맞는 단어를 찾아 그들을 필터링 루프를 잔뜩 있습니다. 그러나, 매우 천천히, plist에 총 약 2000 단어가 있습니다. 아래의 코드를 참조하십시오,이 속도를 빨라야합니다. 약 2-3 초의 지연이 발생합니다! 내가 어떻게 할 수 있는지 잘 모르겠다.중첩 된 For 루프를 빠르게하려면?

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

계측기 (구체적으로 시간 프로필 계측기)를 사용하여 프로필을 작성한 다음 저장된 프로필을 게시하면 Google에서보고 조언을 제공 할 수 있습니다. 프로파일 러없이 최적화하는 것은 눈가리개로 표적을 찍는 것과 같습니다.

관련 문제