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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With