gpt4 book ai didi

Clojure:如何在交换中连接到 HashMap 的前面!功能

转载 作者:行者123 更新时间:2023-12-04 01:40:49 26 4
gpt4 key购买 nike

这工作正常,除了它将新值添加到散列映射的结尾:

(交换!my-atom conj @new-fields)

我需要让 my-atom 成为@new-fields 中的第一个 项。我已经尝试了 assoc-incons 以及几乎所有可能“将事物放在一起”的方法。我该怎么做才能将 my-atom 中的 swap! 移到 @new-fields 的前面?

最佳答案

HashMap 是无序的集合;从逻辑上讲,它们没有“开始”“结束”。它们有一个迭代顺序,这是一个实现细节(基于 key 的哈希值),用户不应依赖它。此迭代顺序将在同一 map 的读数之间保持一致,因为 map 是一个不可变的值。

听起来您想要一种不同的数据类型,以提供可预测的排序。 排序映射 是最简单的替代方法。您可以使用 sorted-map 创建它们(在键上使用 compare 进行排序),或 sorted-map-by (使用比较器函数来比较键)。 conj将一个键值对组合成一个将把它放在第一位,前提是根据比较器,新键是最低的。
请注意,这些仍然是逻辑映射:如果比较器说两个键彼此相等,那么它们就是相同的键,并且生成的映射将只有一个值。

如果您不能使它满足您的要求,那么听起来您实际上并没有使用逻辑映射,因为这些值同时具有索引键。如果您确实需要手动设置顺序,则有几种选择

  • [key value] 元组或具有单个键/值对的映射的向量。
  • 具有复合键 [index old-key] 的映射,按 index 排序,其中 old-key 是您要的任何键现在使用。

关于Clojure:如何在交换中连接到 HashMap 的前面!功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33042116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com