如果我在排序映射上调用键,结果seq是否保证按排序顺序排列?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果我在排序映射上调用键,结果seq是否保证按排序顺序排列?相关的知识,希望对你有一定的参考价值。
如果我在keys
类型上调用sorted-map
,我会假设生成的seq
与地图中的键值对的顺序相同。
然而,ClojureDocs的一位名叫Jarzka的用户在大约2年前说过:
我注意到键并不总是以相同的顺序返回。通常它们是,但并非总是如此。
(不幸的是,我无法直接链接到评论。它位于描述keys
的页面底部。)
为什么会这样?我应该(sort (keys m))
安全吗?
(def m (sorted-map :a 1, :b 2, :c 3))
(def maybe-unsorted-keys? (keys m))
(def sorted-keys (sort (keys m)))
答案
如果你看一下key和val的实现,它看起来像一个有效的假设,它们将以相同的顺序返回,排序:
https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/PersistentTreeMap.java#L888
另一答案
- 返回地图键的序列,顺序与(seq map)相同。
- 返回地图值的序列,顺序与(seq map)相同
因此,无论地图是否排序,调用(keys m)
和(vals m)
的结果将与1对1相对应。由于排序映射按键排序,因此(keys srt-map)
的结果将被排序。
以上是关于如果我在排序映射上调用键,结果seq是否保证按排序顺序排列?的主要内容,如果未能解决你的问题,请参考以下文章