consider this inside a reduce loop:
(if (contains? m k)
(update m k conj v)
(assoc m k [v]))
Is there a way to get rid of the if statement?
consider this inside a reduce loop:
(if (contains? m k)
(update m k conj v)
(assoc m k [v]))
Is there a way to get rid of the if statement?
Use fnil
to handle the nil value of v
when k
doesn't exist in the map:
(update m k (fnil conj []) v)
While the fnil
answer is more spectacular, I find the following easier to read, especially if unfamiliar with fnil
:
(assoc m k (conj (m k []) v))
where (m k [])
returns the value of k
in m
or defaults to []
if k
does not exist in m
.
If k
is a symbol, (k m [])
would also work.
© 2022 - 2024 — McMap. All rights reserved.