簡體   English   中英

Clojure:將值設置為鍵

[英]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具有namesymbolkeyword功能,可在字符串和符號/關鍵字之間進行轉換。 由於您已經擁有ID作為字符串,因此您只需調用keyword即可將其轉換。

確保始終將瀏覽器選項卡打開到The Clojure CheatSheet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM