あなたがしようとしていることは、autocompleteと呼ばれています(またはそのバリエーションです。あなたはオンザフライでリストを単純にフィルタリングしています)。これは非常に一般的な機能です。
入力が形成されたときにリストを更新できる必要があるため、データをすばやく参照する必要があります。もちろん、入力はキーストロークの形で来る可能性があり、人によっては非常に速いタイピストです。
あなたのリストがメモリに格納されていて、それがやや小さいのであれば、おそらくあなたのベスト・ベットが検索基準のリストをフィルタリングするでしょう(これはボックスに入力されているものを参照します)。
リストがメモリに含まれていない場合は、何らかの理由でデータのインデックスを作成する必要があります。一般的に、データベースはこの種のものには適していません。一部のユーザーはテキストインデックスを作成しています(SQL Serverはそうしています)。
データベースを使用していない場合は、Lucene.NETを使用してコンテンツのインデックスを作成することを検討してください。コンテンツが十分に小さい場合は、RAMDirectory
を使用することをおすすめします。そうでなければ、標準FSDirectory
(ファイルベース)が問題ありません。
Luceneでは、Contrib.Shingles
package(最新のビルドに含まれているかもしれませんが、わかりません)を使用します。これは、文字で項目をトークン化するnグラムのフィルタですので、基本的に最初の数文字(検索条件)を検索して結果を得ることができます。
あなたが取る方法にかかわらず、入力される入力の速度を考慮する必要があります。キーが押されるたびにルックアップを実行すると、適用される。
一般に、検索条件が2文字を超えてから検索を開始したい場合があります。さらに、行われた要求の数を追跡します。要求が戻ってきて新しい入力が送信された場合、古い要求を取り消して新しい要求を送信すると、古い要求の値は使用されません。
UIコンポーネントに関しては、別のコンポーネントベンダーにこれを処理させる方が良いでしょう。 WinFormsにはTextBox
のオートコンプリートメカニズムがあり、SilverlightにはSilverlight Toolkitのオートコンプリートがあり、jQueryにはWebページのオートコンプリートメカニズムがあります。これらのうちの1つを使用し、上記のガイドラインを使用してデータをシャッフルしてください。
「オートコンプリート」のように聞こえます。 – David
自動完成機能を探していますか?つまり、ユーザーがデータソースにインデックスを作成したり実際にインデックスを作成したりするときに、リスト内の要素を見つけますか?異なるもの。 – dotnetnate
データベースを使用していますか? – bfavaretto