Hash
とDictionary
の違いは何ですか?
スクリプティングのバックグラウンドから来て、私はそれらは似ていると感じていますが、正確な違いを見つけたかったのです。グーグル操作はあまり役に立ちませんでした。
Hash
は、プログラマがインターフェイスと実装(および完全な名前を書くのが面倒なので、代わりにHashTable
の代わりに略語Hash
)を使用しました。
Dictionary
は、インターフェイスの 「正しい」名前 です(= [〜# 〜] adt [〜#〜] )、つまり(通常は一意の)キーを(必ずしも一意ではない)値にマップする連想コンテナ。
ハッシュテーブルはoneこのようなディクショナリの可能な実装であり(ランタイムに関して)非常に優れたアクセス特性を提供するため、多くの場合、デフォルトの実装です。
このような実装には、2つの重要な特性があります。
(キーがハッシュ可能であることは、後で配列のインデックスとして使用されるキーから数値を計算できることを意味します。)
キーにorderingを課すディクショナリデータ構造の代替実装が存在します。これはsortedディクショナリ(および他の効率的な実装が存在しますが、通常は検索ツリーの観点から実装されます)。
要約すると:dictionaryは、キーを値にマップするADTです。このADTにはいくつかの可能な実装があり、そのうちハッシュテーブルは1つです。 Hash
は誤った名称ですが、コンテキストでは、ハッシュテーブルの観点から実装された辞書と同等です。
「辞書」はコンセプトの名前です。ハッシュテーブルは可能な実装です。
辞書は、高速な検索/挿入に使用されるデータ構造の実装に与えられる総称です。これは、ハッシュテーブル、スキップリスト、RBツリーなどのさまざまなデータ構造を使用して実現/実装できます。ハッシュテーブルは、ディクショナリの実装を含む多くの目的に役立つ特定のデータ構造です。
dictionaryは、キーを使用して連想配列内の直接値を参照します。
つまり(KEY => VALUE)
ハッシュはハッシュテーブルと表現されることが多く、ハッシュ関数を使用してメモリ(またはより簡単には配列)内の位置を計算します。値になります。 ハッシュは入力としてKEYを取り、出力として値を与えます。次に、その値をメモリまたは配列のインデックスに挿入します。
つまりKEY => HASH FUNCTION => VALUE
1つは直接であり、もう1つはそうではないようです。ハッシュ関数も完全ではない可能性があり、誤った値を参照するインデックスを提供する場合があります。しかし、それは修正できます。
見るのに最適な場所:ウィキペディア(連想配列およびハッシュテーブル)