javascript - 现实世界中的 map (哈希表)

标签 javascript python data-structures map

我正在尝试向编程新手解释 Map(又名哈希表、字典)。虽然每个人都熟悉 Array(=事物列表)和 Set(=事物袋)的概念,但我很难找到 Maps 的真实世界隐喻(我对 python 特别感兴趣dicts 和 Javascript Objects)。经常使用的字典/电话簿类比是不正确的,因为字典是排序的,而 map 不是——这一点对我来说很重要。 所以问题是:在计算中表现得像 Map 的真实世界现象或设备是什么?

最佳答案

我同意 delnan 的观点,人类的例子可能与物体的例子太接近了。如果您试图过渡到解释对象是如何用松散类型的语言实现的,那么这很有效,但是映射是 Java 和 C# 中也存在的概念。如果他们开始使用这些语言,这可能会非常困惑。

从本质上讲,您需要了解 map 是依赖一组唯一值作为键的即时查找。这两件事确实需要强调,所以这里有一个体面但高度做作的例子:

假设您正在举办派对,每个人都应该带一样东西。为了帮助组织者,每个人都说出他们的名字和他们带来的东西。现在假设有两种方法来存储此信息。第一种是把它记在 list 上,第二种是告诉有教学内存的人。人为的部分是他们只能通过你的名字来识别你(所以他是盲人并且有人工耳蜗所以每个人听起来都像机器人,我能想到的最好)。

列表:要添加,您只需追加到列表的底部。要退出,您只需将自己从列表中删除即可。如果您想查看谁带来了什么以及他们带来了什么,那么您必须扫描整个列表,直到找到它们。如果扫描后没有找到,那么很明显他们不在名单上,也没有带任何东西。该列表显然允许重复使用相同名字的人。

字典(做作的人):你没有附加到列表的末尾,你只是告诉他某人的名字和他们带来的东西。如果您想知道某人给您带来了什么,只需直呼其名即可,他会立即告诉您。同样地,如果两个同名的人告诉他他们带来了一些东西,他会认为是同一个人只是改变了他们带来的东西。如果有人没有注册,你会问他的名字,但他会很困惑,问你在说什么。此外,当您告诉那个人有人不再带东西时,您还必须说他会失去对他们的所有内存,所以是的,非常做作。

如果您不关心谁带来了什么,您可能还想说明为什么这个列表就足够了,而只需要知道所有带来的东西。甚至可以将名称从列表中删除,以在字典中强调键/值对。

关于javascript - 现实世界中的 map (哈希表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16586364/

相关文章:

c - 如何在 Gtree (glib) 上搜索元素?

javascript - Three.js 设备方向控制 : Limit or disable XY rotations

javascript - 如何在不询问位置的情况下了解天气情况

javascript - AngularJS 未在 Controller 中接收广播

javascript - xmlhttprequest : network error 0x800c0019, 访问此资源所需的安全证书无效。 WINJS

python - Django 中使用正则表达式动态重定向页面?

python - 即使安装了 wget,也无法将其识别为命令

python - 打包在 requirements.txt 中,但在 docker 中看不到

c++ - C++结构语法 “a : b”是什么意思

c - 哈希函数确定