4

iOSでは、誰かの名前を入力して新しいSMS / iMessageなどを送信し始めると、オートコンプリートリストがポップアップ表示されます。

この検索アルゴリズムの動作を再現しようとしていますが、思ったほど簡単ではありません。これをデバイスで試して、意味を確認できますが、たとえば、「Joh」または「Brow」と入力すると、「JohnBrown」が表示されます。ただし、「ohn」と入力しても結果は表示されません。さらに難しくするために、「Mr Green」と入力すると、「Mr Evan Green」が表示されます...メッセージで自分で試してみてください。おそらく、その方が理解しやすいでしょう。

このオートコンプリートアルゴリズムを実装する簡単な方法はありますか?(名前を含むNSStringの配列と、それらをフィルタリングするためのサブストリングがあります)。

簡単な方法がない場合、これについてどのように対処しますか?

4

2 に答える 2

8

この目的のために、文字列からトライを作成する必要があります。接尾辞木(TRIEよりも改善されたもの)または接尾辞配列(接尾辞木に基づいてデータ構造を取り除いたもの)を使用することもできます。Trieを使用したアルゴリズムについては、このリンクを確認してください。

これらのデータ構造の違いについては、この質問を確認してください。

接尾辞ツリーのアイデアは、入力文字列のすべての接尾辞へのパスを持つことです。ツリー検索を使用して、ランダムな文字列が入力文字列と非常に高速に一致するかどうかを見つけることができます。

于 2012-07-17T08:14:00.557 に答える
0

名と名前を区切ります。次に、いずれかの文字列が入力された部分文字列で始まるかどうかを確認します。これにより、最初に説明したケースで望ましい動作が得られます。

2番目のケースはより難しく、実装と説明の両方が困難です。これを行う方法は、入力した文字をスペースで分解して、サブストリング("Mr"と"Green")の配列を作成することです。次に、前と同じチェックを実行します。配列内のそれぞれをチェックして、名または姓の先頭と一致するかどうかを確認します。含まれている場合は、結果に追加します。

于 2012-07-17T08:06:50.403 に答える