【问题标题】:Clojure: set value as a keyClojure:将值设置为键
【发布时间】:2019-02-14 19:10:11
【问题描述】:

可能是,这是一个愚蠢的问题,但它可能对许多新手有所帮助。如何向地图添加键值对?

我的意思是这样的:

(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"]}

【问题讨论】:

  • @Carcigenicate 好吧,我不熟悉 Clojure。我想要做的是将一个项目添加到某个集合中,比如在 JavaScript 中:function fn(col, item) { return { ...col, [item.id]: item.value } }。我很抱歉这个解释:)
  • 这是一个空的map(集合),我要添加键值对。

标签: clojure lisp


【解决方案1】:

只是不要这样做。使用字符串本身作为映射键。没有理由将其设为关键字。如果您不理会它,使用起来会容易得多。

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

【讨论】:

    【解决方案2】:

    我认为这就是你的意思:

      (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 保持打开状态。

    【讨论】:

      猜你喜欢
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 2019-04-26
      相关资源
      最近更新 更多