如果键存在:更新,否则:关联
if key exists: update, otherwise: assoc
在 reduce 循环中考虑这个:
(if (contains? m k)
(update m k conj v)
(assoc m k [v]))
有没有办法去掉 if 语句?
当k
在地图中不存在时,使用fnil
处理v
的nil值:
(update m k (fnil conj []) v)
虽然 fnil
的答案更引人注目,但我发现以下内容更容易阅读,尤其是在不熟悉 fnil
的情况下:
(assoc m k (conj (m k []) v))
其中 (m k [])
returns m
中 k
的值或默认为 []
如果 k
不存在于 m
.
如果 k
是一个符号,(k m [])
也可以。
在 reduce 循环中考虑这个:
(if (contains? m k)
(update m k conj v)
(assoc m k [v]))
有没有办法去掉 if 语句?
当k
在地图中不存在时,使用fnil
处理v
的nil值:
(update m k (fnil conj []) v)
虽然 fnil
的答案更引人注目,但我发现以下内容更容易阅读,尤其是在不熟悉 fnil
的情况下:
(assoc m k (conj (m k []) v))
其中 (m k [])
returns m
中 k
的值或默认为 []
如果 k
不存在于 m
.
如果 k
是一个符号,(k m [])
也可以。