1

iPhoneの単語ゲームを作っています。改行で区切られたすべての英単語を含むテキスト ファイルがあります。

有効な単語を確認する方法をいくつか試しました。SQLite データベースを使用すると、ほぼ瞬時に読み込まれますが、検索時間が長すぎます。ゲームのロード時にすべてをアレイにロードできますが、2 年前の iPod では約 7 秒かかります。検索は高速ですが。最適なバランスは、ファイル全体を にロードしNSStringて正規表現を実行することであることがわかりました。

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:[NSString stringWithFormat:@"\n%@\n", word] options:NSRegularExpressionCaseInsensitive error:&error];

NSUInteger numberOfMatches = [regex numberOfMatchesInString:self.words options:0 range:NSMakeRange(0, [self.words length])];

NSLog(@"%i matches found", numberOfMatches);

ただし、これはリストがアルファベット順であるという事実を利用していません。その事実を利用して、これをどのように高速化できますか?

ひねりの 1 つは、ユーザーがワイルド文字を使用できるようにすることです。そのため、正規表現は次のようになります。@"wo.d"

4

1 に答える 1

0

インデックス作成とも呼ばれる 2 レベルのアプローチはどうでしょうか。

最初の文字を確認し、その文字を含むすべての単語を配列にロードします。すべての単語の読み込み時間が 7 秒の場合、特定の開始文字を持つ単語の場合、平均で 7 秒 / 24 ≒ 0.3 秒になるはずです。

最初の文字がない場合は、最後の文字、2 番目の文字なども使用できます。これをサポートするために、SQLite でインデックスを作成できます。

于 2012-08-08T19:02:54.493 に答える