3

プログラミングの初心者に Map (別名、ハッシュ テーブル、dict) を説明しようとしています。配列 (= 物のリスト) とセット (= 物の袋) の概念は誰にでもなじみ深いものですが、マップの現実世界の比喩を見つけるのに苦労しています (私は特に pythondictsと Javascriptに興味がありますObjects) 。 . よく使われる辞書と電話帳の類推は正しくありません。辞書はソートされていますが、マップはソートされていないためです。この点は私にとって重要です。問題は、コンピューティングにおける Map のように動作する現実世界の現象またはデバイスは何でしょうか?

4

5 に答える 5

3

人間の例はおそらくオブジェクトの例に近すぎるという点で、デルナンに同意します。オブジェクトが緩い型付け言語でどのように実装されているかを説明しようとしている場合、これはうまく機能しますが、マップは Java と C# にも存在する概念です。これらの言語を使い始めると、非常に混乱する可能性があります。

基本的に、マップは一意の値のセットをキーとして使用するインスタント ルックアップであることを理解する必要があります。これらの 2 つのことは本当に強調する必要があるため、適切ではあるが高度に工夫された例を次に示します。

あなたがパーティーを開いていて、全員が何かを持ってくることになっているとしましょう。主催者を助けるために、全員が自分の名前と持ち物を言います。ここで、この情報を保存する方法が 2 つあります。1 つ目は、リストに書き留めることであり、2 つ目は、教訓的な記憶を持っている人に伝えることです。不自然な部分は、彼らがあなたのファーストネームでしかあなたを識別できないということです(つまり、彼は盲目で人工内耳を持っているので、誰もがロボットのように聞こえます.

リスト: 追加するには、リストの一番下に追加します。取り消すには、リストから自分を削除するだけです。誰が何かを持ってきたのか、何を持ってきたのかを知りたい場合は、リスト全体をスキャンして見つける必要があります。スキャンしても見つからない場合は、リストに載っておらず、何も持っていないことは明らかです。このリストは、同じ名を持つ人々の重複を明確に許可します。

辞書 (不自然な人): リストの最後に追加するのではなく、名前と持ち物だけを伝えます。誰かが何を持ってきているか知りたい場合は、名前で尋ねるだけですぐに教えてくれます。同様に、同じ名前の 2 人が何かを持ってきていると彼に言った場合、彼は同じ人が持ってきたものを変えただけだと思います。誰かがサインアップしていない場合、あなたは名前で尋ねますが、彼は混乱してあなたが何について話しているのか尋ねます. また、誰かが何かをもう持っていないことを男に伝えると、彼はそれらのすべての記憶を失うと言わなければならないので、非常に不自然です.

また、誰が何を持ってくるかは気にせず、すべて何を持ってくるかを知る必要がある場合は、リストで十分である理由を示すこともできます。ディクショナリでキーと値のペアを強調するために、名前をリストから除外することもできます。

于 2013-05-17T23:43:23.060 に答える
1

論理的な方法で配列を説明することに成功していますか..その配列は、要素が最初の位置に保持されるストレージです。セカンドポジション、サードポジション....ファースト、セカンド.サードは基本的にキー...

ここで、マップはストレージであり、キーは必ずしも数値ではない..それらが文字列であるとしましょう...または連続していないか、関係がない数値でさえあると言ってください

逆に、配列 A(of int) には、インデックス 1 が A のアドレスにマップされ、2 が A + 4 のアドレスにマップされるなどのマップがあるとしましょう。

于 2013-05-17T21:01:02.077 に答える
1

一部のレストランでは、カウンターで注文すると、注文を識別する番号が与えられます。数字:

  • ソートする必要はありません。
  • 連続しなくてもいい

数字の唯一のアイデアは、彼らがあなたの注文を簡単に見つけることができるということです. マップ/ハッシュ テーブル/連想配列の世界では、数値がキーになり、順序が値になります。

注文が完了したら、同じ番号を別の注文に使用できます。したがって、番号は基本的に特定の時点での注文の識別子です。これは、オブジェクトのプロパティが値を変更できる Javascript オブジェクトの例に適合します。

于 2013-05-17T23:10:59.620 に答える