gpt4 book ai didi

clojure - 如何在 clojure 中的 HashMap 上插入 if

转载 作者:行者123 更新时间:2023-12-02 16:16:49 24 4
gpt4 key购买 nike

这是有效的:

{:a :v (if true :f) :r }

这不是

{:a :v (if true {:f :r}) }

因为它想在结构中放入一个新的 HashMap

我需要在该if中返回一个特殊的结构(我忘记了它的名字)包含键和值,因此它被插入到 HashMap 中。

谢谢

最佳答案

第二种情况失败不是因为 if 表单返回错误类型的值,而是因为映射包含奇数个项目。映射文字必须包含偶数个形式,并且 if 是单个形式。

有多种方法可以在 Clojure 中向 map 添加内容。

您可以使用conj使用向量或 map 参数:

(conj {:a :v} [:f :r])  ;;=> {:f :r, :a :v}
(conj {:a :v} {:f :r}) ;;=> {:f :r, :a :v}

您可以使用assoc将 key 和 val 作为单独的参数:

(assoc {:a :v} :f :r)   ;;=> {:f :r, :a :v}

或者您可以使用merge以两个(或更多) map 作为参数:

(merge {:a :v} {:f :r}) ;;=> {:f :r, :a :v}

您正在考虑的特殊结构可能是MapEntry。这就是通过在 map 上调用 seq 创建的 seq 中的项目。

例如:

(seq a-map)                ;;=> ([:a :v] [:f :r])
(first (seq a-map)) ;;=> [:a :v]
(-> a-map seq first class) ;;=> clojure.lang.MapEntry

map 条目的外观和行为就像矢量一样,只是添加了一项。您可以使用 keyval 函数分别访问 key 和 val(实际上相当于 (get map-entry 0)(获取 map 条目1))。

(key map-entry) ;;=> :a
(val map-entry) ;;=> :v

您可以将 map 条目conj到 map 上,就像矢量一样。

关于clojure - 如何在 clojure 中的 HashMap 上插入 if,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21869996/

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