【问题标题】:Does Clojure have a set that remembers insertion order?Clojure 是否有一个记住插入顺序的集合?
【发布时间】:2017-12-13 15:02:21
【问题描述】:

就像 Java 的 LinkedHashSet。所以不要这样:

(-> #{} (conj 1 2 3 4 5) vec)
=> [1 4 3 2 5]

你得到:

 (-> ??? (conj 1 2 3 4 5) vec)
=> [1 2 3 4 5]

【问题讨论】:

    标签: clojure


    【解决方案1】:

    不在核心库中,但有this one

    (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)
    

    【讨论】:

    • 你知道他们为什么有ordered-map吗?我只是在测试 Clojure 的原生地图,它的行为似乎已经如此。也许我只是走运了。
    • 核心有sorted-map,但没有ordered-map。我相信当您只有很少(十个或更少?)键时,本机映射会保留插入顺序顺便说一句,因为映射由不同的数据结构支持,具体取决于它们有多少键:stackoverflow.com/a/16516760
    猜你喜欢
    • 2019-12-02
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 2014-12-17
    • 2011-01-23
    相关资源
    最近更新 更多