这工作正常,除了它将新值添加到哈希映射的末尾:
(swap! my-atom conj @new-fields)
我需要my-atom
成为@new-fields 中的第一项。我已经尝试过assoc-in
,cons
几乎所有可以“把东西放在一起”的东西。我能做些什么,以swap!
在my-atom
与前部@new-fields
?
哈希映射是无序的集合;在逻辑上不具备一个“开始”或“结束”。它们有一个迭代顺序,这是一个实现细节(基于密钥的散列),用户不应依赖它。这个迭代顺序在同一地图的读数之间将是一致的,因为地图是一个不可变的值。
听起来您想要不同的数据类型,以提供可预测的排序。排序映射是最简单的替换。您可以使用sorted-map
(compare
对键进行排序)或sorted-map-by
(使用比较器函数来比较键)来创建它们。conj
如果根据比较器,新键是最低的,则将键值对合并为一个将把它放在第一位。
请注意,这些仍然是逻辑映射:如果比较器表示两个键彼此相等,则它们是相同的键,结果映射将只有一个值。
如果您不能使其符合您的要求,听起来您实际上并未使用逻辑映射,因为这些值同时具有索引和键。如果您确实需要手动设置订单,则可能有一些替代方案
[key value]
具有单个键/值对的元组或映射向量。[index old-key]
,排序于index
,old-key
您现在正在使用的任何键在哪里。