iPhoneアプリのNSStringに共通のファーストネームが含まれているかどうかを確認するのが最善の方法です。私は、新しい行で区切られた〜5500の一般的なアメリカのファーストネームのソートされたフラットテキストファイルを持っています。私が名前の中で探しているNSStringは、それほど長くはありません。通常は、通常の文のサイズです。NSStringにiPhoneの一般的なファーストネームが含まれていないか確認してください。
ソートされたリストをメモリにロードしてから、NSString内のすべての単語を繰り返してリストのバイナリ検索を実行して、その単語が共通名であるかどうかを判断しました。
CoreDataまたはSQLiteテーブルにこの名前リストを入れてクエリを実行する方が良いでしょうか?私が理解していることは、もし私がそのルートを訪れれば、リスト全体をメモリにロードする必要はないということです。
私はこの状況が単語ゲームの単語辞書によくある問題だと推測しています。そのため、高速検索のベストプラクティスが何であるか不思議です。ありがとう!
「NSString内に共通のファーストネームが含まれているかどうかをチェックする」という意味を明確にすることはできますか。これは、「Johnというユーザーが入力しました」という意味ですか、「John」を意味していますか?つまり、チェックしている文字列は名前だけで構成されているのでしょうか、名前の他に「その他のもの」が含まれている文字列内に名前を入れなければなりませんか?これにより、選択されたアプローチに差異が生じる可能性があります。また、「迅速に」これを行う必要がありますか? – johne
名前は、名前の他に「その他のもの」を含む文字列内になければなりません。文字列が長くない、50〜100文字の標準文章。できるだけ早くそれを望みますが、記憶とのトレードオフがあることを理解しています。 –
スピードが問題であれば、おそらく〜5500の名前のDFAをその場で構築していました。必要に応じて、DFAを不揮発性ストレージにシリアル化することができます。 DFAはUnicode対応でなければならず、おそらく便宜のためにUTF8を使用します。次に、 'CFStringGetCStringPtr' /' CFStringGetBytes'を使用して、文字列のUTF8コピーを取得し、その上でDFAを実行します。パフォーマンスは〜O(n) 'となります。ここで' n'は検索する文字列のサイズです。 – johne