Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当且仅当Clojure中存在密钥时,如何更新该密钥?_Clojure - Fatal编程技术网

当且仅当Clojure中存在密钥时,如何更新该密钥?

当且仅当Clojure中存在密钥时,如何更新该密钥?,clojure,Clojure,假设我有这样一个对象: { 讨厌的键:值, 另一个关键:价值 } 我怎么能把那个物体变成这样 { 更好的关键:价值, 另一个关键:价值 } 如果yucky键不存在,我希望返回的输入保持不变 我已经研究了对值起作用的update函数。但是我没有看到类似的键函数。您可以使用clojure.set中的rename keys来更改键 如果要更改的键不存在,则返回原始映射 user> (def m2 {"okay-key" "value", "an

假设我有这样一个对象:

{ 讨厌的键:值, 另一个关键:价值 } 我怎么能把那个物体变成这样

{ 更好的关键:价值, 另一个关键:价值 } 如果yucky键不存在,我希望返回的输入保持不变


我已经研究了对值起作用的update函数。但是我没有看到类似的键函数。

您可以使用clojure.set中的rename keys来更改键

如果要更改的键不存在,则返回原始映射

user> (def m2 {"okay-key" "value",  "another-key" "value"})
#'user/m2

user> (clojure.set/rename-keys m2 {"yucky-key" "better-key"})
{"okay-key" "value", "another-key" "value"}

您可以使用clojure.set中的重命名密钥来更改密钥

如果要更改的键不存在,则返回原始映射

user> (def m2 {"okay-key" "value",  "another-key" "value"})
#'user/m2

user> (clojure.set/rename-keys m2 {"yucky-key" "better-key"})
{"okay-key" "value", "another-key" "value"}

如果要手动编写实现,可以执行以下操作:

(def m1 {"yucky-key" "value1"
         "another-key" "value2"})
(def m2 {"good-key" "value1"
         "another-key" "value2"})

(defn replace-key-in-map
  [m original-key targeted-key]
  (into {}
        (map (fn [[k v]]
               (if (= k original-key)
                 {targeted-key v}
                 {k v}))
             m)))

(replace-key-in-map m1 "yucky-key" "better-key")
(replace-key-in-map m2 "yucky-key" "better-key")

如果要手动编写实现,可以执行以下操作:

(def m1 {"yucky-key" "value1"
         "another-key" "value2"})
(def m2 {"good-key" "value1"
         "another-key" "value2"})

(defn replace-key-in-map
  [m original-key targeted-key]
  (into {}
        (map (fn [[k v]]
               (if (= k original-key)
                 {targeted-key v}
                 {k v}))
             m)))

(replace-key-in-map m1 "yucky-key" "better-key")
(replace-key-in-map m2 "yucky-key" "better-key")