Axs*_*Axs 15 javascript set ecmascript-6
随机试验 JavaScript (ES6) 并阅读其文档,我发现它Set保持其元素的插入顺序。
我想知道这个决定背后的理由是什么?我一直认为集合是一个无序的集合。需要更多的东西会导致更昂贵的实现,而在我看来,这个功能大多未使用。
geo*_*org 19
有序集非常有用,例如考虑:
unique_elements_in_order = [...new Set(some_array)]
Run Code Online (Sandbox Code Playgroud)
在“未排序的集合”语言中,例如 python,您需要一个单独的OrderedSet实现才能使其工作。
是的,理论上,集合不是有序的,但是数学抽象,如集合、函数、数字等,只与我们在编程中使用的名称相似的对象相切相关。Set只是一种特殊的数据结构,由语言设计者来定义它的特定属性,例如“集合按插入顺序排列”或“集合只能包含可散列对象”等。
至于委员会的动机,一些谷歌搜索带来了这个
马克·S·米勒:
太平洋标准时间 2012 年 2 月 13 日星期一 22:31:28
决定论有很多好处。E 以不确定的迭代顺序开始,这打开了一个隐蔽的通道危险。我最初更改为确定性顺序只是为了堵住这个泄漏。这样做之后,我发现它有很多软件工程的好处。例如,编写回归测试和通过重新执行重现错误变得更加容易。在我的实现中,它还有一点额外的空间和时间成本。Tyler 的 Waterken 表表明,即使是我支付的微小运行成本也是不必要的。
我们不要为了无法衡量的效率而引入另一个不确定性来源。让我们衡量一下,如果结果证明成本毕竟很高,那么让我们重新考虑确定性。