あなたはどのように確認するためにビットを掘るために持っている辞書は、そのないように明らかと- C#で実装されたHashMap(ハッシュテーブル)またはTreeMapの(ソートされたツリー)(またはConcurrentSkipListMapの - スキップ・リスト)。
「備考」セクションを掘り下げる場合:
Dictionaryジェネリッククラスは、キーのセットから値のセットへのマッピングを提供します。辞書への各追加は、値とそれに関連付けられたキーで構成されます。Dictionaryクラスはハッシュテーブルとして実装されているため、キーを使用して値を取得するのは非常に高速で、O(1)に近いです。
そして、それがあります。それはハッシュテーブルです。そこにウィキペディアの記事をリンクしていることに注意してください-それはかなり良い読み物です。衝突の解決に関するセクションを読むことをお勧めします。ルックアップがO(N)に委ねられる病理学的データセットを取得することが可能です(たとえば、何らかの理由で、挿入するものはすべて同じハッシュ値またはハッシュテーブルのインデックスに該当し、リニアプローブが残ります)。
ディクショナリは汎用ソリューションですが、具象型(ディクショナリなど)を渡すべきではありません-インターフェイスを渡すべきです。この場合、そのインターフェースはIDictionary
(docs)です。これに対して、あなたはあなたが持っているデータに対して最適なことをするあなた自身の辞書実装を書くことができます。
さまざまなルックアップ/包含の効率については?
- ソートされていないリストを歩く:O(N)
- ソートされた配列のバイナリ検索:O(log N)
- ソートされたツリー:O(log N)
- ハッシュテーブル:O(1)
ほとんどの人にとって、ハッシュテーブルは必要なものです。
代わりに、SortedDictionaryが必要なものであることがわかります。
SortedDictionary<TKey, TValue>
ジェネリッククラスは、辞書内の要素の数であるnはO(Nログ)検索とバイナリ検索ツリーです。この点で、SortedList<TKey, TValue>
ジェネリッククラスに似ています。2つのクラスには類似したオブジェクトモデルがあり、両方ともO(log n)を取得します。
ただし、データ構造がデータで理想的に機能するものでない場合は、データに最適なものを作成できるツール(インターフェイス)が提供されます。
辞書自体は抽象データ型です。あなたは私に辞書を与えて、私はそれで何ができるか、そして辞書であるという性質からそこに私が使用するすべてのツールを知っています。ArrayListを提供してくれた場合、リストから項目を検索、挿入、または削除するための独自のコードを記述していることに気付くでしょう。これは私の時間を無駄にし、スポットからスポットへコードを何度も何度もコピーするため、バグの可能性が高いことを意味します。
Data Structures
。このウィキリンクはあなたに多くの助けになることも