私はスクラブルゲームを構築していますが、単語辞書に問題があります。約700,000語、約18MBの大きさが含まれています。
今、私はdict全体を配列にロードしています。これはiPhone4では12秒かかります。
wordList = [NSMutableArray arrayWithContentsOfFile: [[self applicationDocumentsDirectory] stringByAppendingString:@"/wordlist.plist"]];
2つの質問があります:
ワードリストをより速くロードしたり、メモリを削減したりするためのより良い方法はありますか?
文字のセットからすべての可能な単語を取得するには、約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; }