Clojure:将值设置为键

Clojure:将值设置为键,clojure,lisp,Clojure,Lisp,也许,这是一个愚蠢的问题,但它可能会帮助许多新手。如何将键值对添加到映射 我的意思是: (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=> {:1234

也许,这是一个愚蠢的问题,但它可能会帮助许多新手。如何将键值对添加到映射

我的意思是:

(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
    [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作为字符串,因此只需调用
关键字
即可对其进行转换


确保始终打开浏览器选项卡。

只是不要这样做。使用字符串本身作为映射键。没有理由让它成为关键词。如果你不去管它,工作起来就容易多了

(defn init-item [v item]
  (assoc v (:id item) (:value item)))

@好吧,我不熟悉Clojure。我想做的是向JavaScript中的某个集合添加一个项:
函数fn(col,item){return{……col[item.id]:item.value}
。我很抱歉这样解释:)这是一个空映射(集合),我想添加键值对。