3

アイテムのリストに文字列が含まれているかどうかを確認する必要があります...ユーザーが検索ボックスに入力すると、リストがフィルタリングされるようなものです。したがって、テキスト変更イベントでは、入力されたテキストが listox アイテムの 1 つに含まれているかどうかを確認し、除外しています...次のようなものです。

value.Contains(enteredText)

これがリストボックス項目を除外する最も速くて効率的な方法かどうか疑問に思っていましたか?

Contains()メソッドはC#で部分文字列を検索する最良の方法ですか?

4

3 に答える 3

4

非常に例外的な状況を除いて、それは十分に高速で効率的であり、そのような例外的な状況であっても、純粋に学術的な問題になる可能性が高いと言えます。それを使用して、これに関連するロジックのボトルネックに遭遇した場合、私は驚かれることでしょう。

于 2013-03-22T15:14:52.433 に答える
1

Contains私のコード補完フィルタリング アルゴリズムの中で最も安価な方法の 1 つです(パート 6 #6、脚注で説明されている #7 とファジー ロジック マッチングははるかにコストがかかります) 。ドロップダウンの何千ものアイテム。

私はそれがあなたに問題を引き起こすことを非常に疑います.

于 2013-03-22T15:15:11.367 に答える
1

これは世界的に最速のオプションではありませんが、何もコーディングする必要がない最速のオプションです。ドロップダウン アイテムのフィルタリングには十分なはずです。

より長いテキストの場合は、線形タイミングの複雑さを持つKMP アルゴリズムを使用することをお勧めします。ただし、非常に短い検索文字列の場合は違いがないことに注意してください。

多くの一致がある検索 (たとえば、最初の 1 ~ 2 文字で得られるもの) の場合は、1 つの文字と文字のペアをドロップダウン リストの行にマップするテーブルを事前に計算して、はるかに高速に検索することをお勧めします。より多くのメモリを使用することを犠牲にしてアップします (一般的なプログラミングではかなり標準的なトレードオフです)。

于 2013-03-22T15:22:10.780 に答える