[英]Clojure: set value as a key
可能是,这是一个愚蠢的问题,但它可能对许多新手有所帮助。 如何将键值对添加到地图?
我的意思是:
(defn init-item [v item]
(let [{:keys [id value]} item]
(-> v
(assoc :{ID_AS_A_KEY} value))))
我得到:
(init-item {} {:id "123456789" :value [:name "King" :surname "Leonid"]})
user=> {:123456789 [:name "King" :surname "Leonid"]}
只是不要这样做。 使用字符串本身作为您的地图关键字。 没有理由将其设为关键字。 如果不理会它,则工作起来要容易得多。
(defn init-item [v item]
(assoc v (:id item) (:value item)))
我认为这就是您的意图:
(defn init-item
[dest-map item]
(let [item-id-str (:id item)
item-val (:value item)
item-id-kw (keyword item-id-str)]
(assoc dest-map item-id-kw item-val)))
(let [all-items {:a 1 :b 2 :c 3}
item-1 {:id "123456789"
:value [:name "King" :surname "Leonid"]}]
(init-item all-items item-1)
;=> {:a 1, :b 2, :c 3, :123456789 [:name "King" :surname "Leonid"]}
Clojure具有name
, symbol
和keyword
功能,可在字符串和符号/关键字之间进行转换。 由于您已经拥有ID作为字符串,因此您只需调用keyword
即可将其转换。
确保始终将浏览器选项卡打开到The Clojure CheatSheet 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.