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