gpt4 book ai didi

javascript - JavaScript 中 `Set` 和 `Map` 之间的语义差异是什么?

转载 作者:行者123 更新时间:2023-12-01 03:26:38 25 4
gpt4 key购买 nike

似乎用 Set 能做的一切都可以用 Map 做?这是正确的吗?

SetMap 之间的语义差异是什么?

编辑:链接的“dupe”没有枚举两者之间的语义差异。

最佳答案

我已经撤回了我的接近投票。

快速谷歌搜索一下“set vs. hashtable”或“set vs. hashmap”会发现很多这样的问题,主要是在Java标签中,但我没有看到一个答案能够真正解决一个好的概念上的差异方式(尽管有一些链接到相关资源)。

让我们从数据结构开始:即值的容器。大多数情况下,这些值可以是任何值。有些数据结构是同构的,有些则不是。有些有限制(例如,Map 可以有任意键,但 POJO 只能有字符串或符号键),有些没有,有些是有序的,有些不是,等等。所有这些权衡通常都归结为性能。

集合是一种保存唯一值的数据结构。让我们与数组进行比较:

Array.from(new Set([1,2,2,3])).toString() === [1,2,2,3].toString();
// false

与数组或列表一样,JavaScript 中的集合是线性的:您可以按顺序遍历它们*。但与数组(更像列表)不同,集合没有索引。你不能说new Set(1)[0]; .

另一方面,*咳咳* 映射 键到值(索引)。如果我有一张 map new Map([['a',1]]) ,然后.get('a')将返回1 。通常认为顺序对于 Map 来说并不重要,而键索引的作用则不同。也不是唯一性:new Map([['a', 1], ['b', 1]])将值 1 存储两次**,您可以从任一键访问它。

即使您像我一样主要是自学成才的程序员,我也强烈建议您熟悉基本数据结构,因为它为问题识别和通用解决方案提供了宝贵的见解。如果您发现自己使用Array.prototype.shift例如,您可能需要一个 FIFO 队列/链表。

<小时/>

* 集合通常无序,插入顺序的保留是 JavaScript 的事情。

** 作为优化,底层实现可能只存储一次,但这是一个实现细节,对用户来说是不透明的。

关于javascript - JavaScript 中 `Set` 和 `Map` 之间的语义差异是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44780385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com