当且仅当该密钥存在时,我如何更新 Clojure 中的密钥?
How can I update a key in Clojure if and only if that key is present?
假设我有这样一个对象:
{
"yucky-key": "value",
"another-key": "value"
}
我怎样才能把那个对象改成这样?
{
"better-key": "value",
"another-key": "value"
}
如果 yucky-key
不存在,我希望原样返回输入。
我看过 update
作用于值的函数。但是我没有看到按键的类似功能。
您可以使用 rename-keys
在 clojure.set
中更改密钥
user> (def m {"yucky-key" "value", "another-key" "value"})
#'user/m
user> (clojure.set/rename-keys m {"yucky-key" "better-key"})
{"another-key" "value", "better-key" "value"}
如果要更改的键不存在,则返回原始地图
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")
假设我有这样一个对象:
{
"yucky-key": "value",
"another-key": "value"
}
我怎样才能把那个对象改成这样?
{
"better-key": "value",
"another-key": "value"
}
如果 yucky-key
不存在,我希望原样返回输入。
我看过 update
作用于值的函数。但是我没有看到按键的类似功能。
您可以使用 rename-keys
在 clojure.set
user> (def m {"yucky-key" "value", "another-key" "value"})
#'user/m
user> (clojure.set/rename-keys m {"yucky-key" "better-key"})
{"another-key" "value", "better-key" "value"}
如果要更改的键不存在,则返回原始地图
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")