辞書全体であっても、テキストファイルをメモリに入れることは、seth flowers
言ったようにそれほど悪くはないはずです。単語を保持するための適切なデータ構造を選択することが重要になります。
言葉をキーにした辞書はお勧めしません...正直言ってばかげています。キーだけがあり、値がない場合、辞書は何が良いですか?ただし、Dictionaryのアイデアは順調に進んでいる可能性があります。私が最初に試みるのはDictionary<char, string[]>
、キーが最初の文字であり、値がその文字で始まるすべての単語のリストである、です。もちろん、その配列は非常に長くなり、配列の検索時間は遅くなります(ただし、文字のハッシュは一意であるため、キーの検索は厳密である必要があります)。利点は、適切な.txt辞書ファイルを使用して各単語を順番にロードすると、リストがアルファベット順に並べられていることがわかることです。したがって、バイナリ検索などの効率的な検索手法や、事前に並べ替えられたリスト用に作成された任意の数の検索を使用できます。結局、それほど遅くはないかもしれません。
ただし、さらに詳しく知りたい場合は、予測テキストの基礎となる構造を使用できます。これは、PatriciaTrieまたはRadixTrie(Wikipedia)と呼ばれます。最初の文字から始めて、次のいずれかになるまで、考えられるすべてのブランチを処理します。
- ユーザーが入力した単語を組み立てて、有効な単語にします
- ブランチの終わりに到達します。この言葉は存在しません。
この種の問題に対処するために「試行」が行われました。私はコードでこれを表現したことがないので、私はあなたにポインタを与えることができないのではないかと思います(ba dum tsh!)が、インターネット上でそれを行う方法についての豊富な情報があるでしょう。Trieを使用するのがおそらく最も効率的な解決策ですが、上記のようなアルファベット辞書がバイナリ検索を使用して十分に高速であることがわかった場合は、実際のゲームプレイを開発する間、今のところそれを維持することをお勧めします。ゲームを開始したばかりのときに最良の解決策を見つけることに行き詰まると、それを成し遂げるための情熱が失われる傾向があります。パフォーマンスの問題が発生した場合は、改善を行います。少なくとも、ゲームを設計するときの私の哲学です。
良い点は、Windows Phoneは基本的に2つの異なる仕様しかサポートしていないため、アプリをテストしてスムーズに実行されることを確認したら、さらに悪い条件に合わせて最適化することを心配する必要がないことです。だから、うまくいくものを使ってください!
PS:Windows Phoneでは、テキストファイルの読み込みには注意が必要です。これがあなたを助けるはずの問題に関する投稿です。