gpt4 book ai didi

python - Clojure 中的 map 是有序的吗?

转载 作者:行者123 更新时间:2023-11-28 19:37:01 25 4
gpt4 key购买 nike

我来自 Python,默认情况下不对 map (即字典)进行排序。开始学习 Clojure,我遇到了这个:

(def point {:x 5 :y 7})
=> #'user/point
point
=> {:x 5, :y 7}
(let [{:keys [x y]} point]
(println "x:" x "y:" y))
x: 5 y: 7

在我看来,要使这种解构起作用,必须依赖于 map 的排序(当然,还要记住顺序)。是真的吗?

最佳答案

Clojure 具有三种内置映射类型:数组映射、 HashMap 和排序映射。

其中, HashMap 和排序映射是无序的,但数组映射实际上是有序的:这在 the data structures section 中有解释。关于 clojure.org 的官方文档.

然而,重要的是要注意,数组映射主要用于性能原因——小映射文字(≤ 8 个条目)被编译为数组映射而不是散列映射和关联新键如果数组映射超过大小阈值,则返回一个 HashMap 。可以通过显式调用 clojure.core/array-map 来构建更大的数组映射,但是数组映射操作是 O(n),因此在存在太多条目时变得相当慢,所以这是不是通用的有序 map 数据结构。

如果您需要一个无论大小都能提供良好性能的有序 map ,您应该使用 Alan Malloy/Flatland 的 ordered相反 – 它提供持久有序的集合和由内置数据结构支持的映射(一个集合或一个映射 + 一个向量来跟踪插入顺序)。

关于python - Clojure 中的 map 是有序的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34401121/

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