Clojure 有一个可以记住插入顺序的集合吗?

Rob*_*b N 2 clojure

就像 Java 的LinkedHashSet。所以而不是这个:

(-> #{} (conj 1 2 3 4 5) vec)
=> [1 4 3 2 5]
Run Code Online (Sandbox Code Playgroud)

你得到:

 (-> ??? (conj 1 2 3 4 5) vec)
=> [1 2 3 4 5]
Run Code Online (Sandbox Code Playgroud)

Tay*_*ood 6

不在核心库中,但有这个

(use 'flatland.ordered.set)

(ordered-set 4 3 1 8 2)
=> #ordered/set (4 3 1 8 2)

(conj (ordered-set 9 10) 1 2 3)
=> #ordered/set (9 10 1 2 3)

(into (ordered-set) [7 6 1 5 6])
=> #ordered/set (7 6 1 5)
Run Code Online (Sandbox Code Playgroud)

  • Core 有“sorted-map”,但没有“ordered-map”。我相信当您的键很少(十个或更少?)时,本机地图会_顺便_保留插入顺序,因为地图由不同的数据结构支持,具体取决于它们拥有的键数:/sf/answers/1156173231/ (4认同)