Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 加快嵌套循环的速度?_Iphone_Objective C_Ipad_Loops_Nested - Fatal编程技术网

Iphone 加快嵌套循环的速度?

Iphone 加快嵌套循环的速度?,iphone,objective-c,ipad,loops,nested,Iphone,Objective C,Ipad,Loops,Nested,我有一堆循环,它们在plist中为我找到合适的单词并过滤掉。然而,它太慢了,plist中总共有大约2000个单词。请看下面的代码,我需要加快速度,它会导致大约2-3秒的延迟!不知道我怎么能做到 plist由大约200个数组组成,每个数组中有10个字。所以我拿了一本普利斯特词典,dict。然后遍历所有这些数组,直到找到我需要的单词 for (int i = 0; i < [lang1Words count]; i++) { NSString *erro

我有一堆循环,它们在plist中为我找到合适的单词并过滤掉。然而,它太慢了,plist中总共有大约2000个单词。请看下面的代码,我需要加快速度,它会导致大约2-3秒的延迟!不知道我怎么能做到

plist由大约200个数组组成,每个数组中有10个字。所以我拿了一本普利斯特词典,
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];
                }
            }
        }
    }
for(int i=0;i<[lang1Words count];i++)
{        
NSString*errorWordLang1=[lang1Words对象索引:i];
对于(在[dict allValues]中的NSArray*a)
{
用于(a中的NSString*s)
{
if([errorWordLang1 isEqualToString:s])
{
NSArray*temp=[dict allKeysForObject:a];
NSString*originLang1ArrayKey=[temp objectAtIndex:0];
NSArray*lang1Temp=[self-getWordsArrayForKey:originLang1ArrayKey];
NSInteger索引=[lang1Temp indexOfObject:errorWordLang1];
NSString*原始语言2 ArrayKey;
如果([languageKey isEqualToString:@“Latin”])Originang2ArrayKey=[Originang1ArrayKey StringByRepllacingOfString:@“Latin”with string:@“English”];
如果([languageKey IseQualtString:@“English”])Originang2ArrayKey=[Originang1ArrayKey StringByreplacingsofString:@“English”with string:@“Latin”];
NSArray*lang2Temp=[self-getWordsArrayForKey:originLang2ArrayKey];
NSString*errorWordLang2=[lang2Temp对象索引:索引];
如果(errorWordLang2==nil | | errorWordLang1==nil)中断;
[orderedLang2Words添加对象:errorWordLang2];
[orderedLang1Words添加对象:errorWordLang1];
}
}
}
}

您应该使用仪器(特别是时间配置文件仪器)配置文件,然后发布保存的配置文件,我们可以查看并提供建议。在没有分析器的情况下进行优化就像是蒙着眼睛射击目标。

如果你在plist或字典中加入一小部分,并说出预期的结果,可能会有所帮助。2000 for循环甚至不会影响你的CPU时间。你有没有试过在这段代码之前和之后添加一个NSLog?我不知道这会有什么帮助。尽管所有阵列都是我所期望的。它可能有2000个单词,但我现在做了10次,
lang1Words
可能高达10个。getWordsArrayForKey中有多少种语言?如果只有两个,即拉丁语和英语,则每个都有单独的数组。这将减少在调用getWordsArrayForKey时在内部循环中创建数组的次数。