【问题标题】:Map that keeps its keys in order in which they were added in将其键按添加顺序保存的映射
【发布时间】:2010-11-17 01:20:45
【问题描述】:

Clojure 中是否有数据结构可以满足这个要求:

  • 表示键值对,即是一个映射;
  • get 操作使用少于 O(n);
  • 按添加键的顺序保存键。

【问题讨论】:

    标签: data-structures clojure


    【解决方案1】:

    我也需要这个。我通常选择 map + a seq (包含键的顺序)。你可以去非持久化并使用 LinkedHashMap,但我认为如果你这样做,上帝会杀死一只小猫。

    Chris Houser 的finger tree implementation 是否符合要求?

    【讨论】:

    • 是的,我有一个想法将它实现为 map+seq 对,但我希望 Clojure 有现成的东西。我也会看看手指树的实现,谢谢。
    【解决方案2】:

    罢工>

    user=> (sorted-map-by (fn [_ _] -1) :a 1 :b 2 :c 3 :d 4)
    {:d 4, :c 3, :b 2, :a 1}
    

    使用带有始终返回 -1 的比较器的排序映射。最新的条目将位于地图的开头,而最旧的条目将位于最后。

    错误的答案。请参阅下面的 cmets。

    【讨论】:

    • 尝试从该映射中检索一个值。结果可能会让您大吃一惊。
    • 确实如此!为什么总是返回nil
    • 因为sorted-map 使用比较器来确定密钥是否相等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多