如何解决当且仅当存在密钥时,如何才能更新Clojure中的密钥?
假设我有一个这样的对象:
{
"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")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。