我正在构建一个拼字游戏,但单词字典有一些问题。它包含约 700,000 个单词,大小约为 18 MB。
现在,我正在将整个 dict 加载到一个数组中,这在 iPhone 4 上需要 12 秒。
wordList = [NSMutableArray arrayWithContentsOfFile: [[self applicationDocumentsDirectory] stringByAppendingString:@"/wordlist.plist"]];
我有两个问题:
有没有更好的方法来更快地加载单词表和/或减少内存?
从一组字母中获取所有可能的单词大约需要 12 秒。有没有可能让它更快?这是代码:
-(NSMutableArray *)getValidWords:(NSString *)letters{ NSMutableArray *list = [[NSMutableArray alloc] init]; for (int i = 0, c = [wordList count]; i < c; i++){ if ([self isWordValid: [wordList objectAtIndex: i] forLetters:letters]){ [list addObject:[wordList objectAtIndex: i]]; } } return list;
}
- (BOOL)isWordValid:(NSString *)word forLetters:(NSString *)ltrs{ int i, z; NSRange range; BOOL found; static NSMutableString *letters = nil; if ([word length] < 2) return NO; if(letters == nil) { letters = [[NSMutableString alloc] initWithString:ltrs]; } else { [letters setString: ltrs]; } found = NO; range.length = 1; for(i = 0; i < [word length]; i++){ for(z = 0; z < [letters length]; z++){ if([word characterAtIndex:i] == [letters characterAtIndex:z]){ range.location = z; [letters deleteCharactersInRange: range]; found = YES; break; } } if (found == NO){ return NO; } found = NO; } return YES; }