14

ソートされていない文字列のリストがあります。これらのアイテムは、配列、List、SortedListなどに配置できます。

このリストで文字列を検索する最速の方法を見つける必要があります。リストを配列にダンプし、並べ替えてから、バイナリ検索を実装する方がよいでしょうか。または、フレームワークはこれを行う方法を提供しますか?

ありがとう

PS.NET2.0に対してVS2008を使用する

4

3 に答える 3

23

コレクション内の文字列を非常に高速に検索することが目標である場合は、それらをHashSetに配置します。

HashSet.ContainsはO(1)メソッドであり、文字列にはデフォルトで優れたハッシュアルゴリズムがあるため、これよりも高速なルーチンを作成することは困難です。


編集:

.NET 2を使用しているのでDictionary<string,string>、キーと値に同じ文字列を使用します。 Dictinoary<TKey,TValue>.ContainsもO(1)であり、リストベースの検索よりもはるかに高速です。

于 2010-01-16T00:27:18.447 に答える
2

オブジェクトを1回だけ見つける必要がある場合は、最初から始めて、オブジェクトが見つかるまで各オブジェクトを確認します。同じリストに対してこの検索操作を複数回繰り返して別のアイテムを検索する必要がある場合は、並べ替えたリストを保持して並べ替え、バイナリ検索を実行します...

于 2010-01-16T00:28:46.257 に答える
-2

これがあなたに役立つかどうかはわかりませんが、これはかなり簡単な方法ですが、正確な「速度」についてはわかりません.

List<string> collection = new List<string>();

collection.Sort();

foreach(string value in collection)
{
   if(value == "stringToLookFor")
   {
       return value;
   }
{
于 2010-01-16T00:41:53.253 に答える