Ответ 1
Используйте fnil
для обработки значения nil v
, если k
не существует на карте:
(update m k (fnil conj []) v)
рассмотрим это внутри цикла сокращения:
(if (contains? m k)
(update m k conj v)
(assoc m k [v]))
Есть ли способ избавиться от оператора if?
Используйте fnil
для обработки значения nil v
, если k
не существует на карте:
(update m k (fnil conj []) v)
В то время как ответ fnil
более впечатляющий, мне легче читать следующее, особенно если вы не знакомы с fnil
:
(assoc m k (conj (m k []) v))
где (m k [])
возвращает значение k
в m
или по умолчанию - []
, если k
не существует в m
.
Если k
является символом, также будет работать (k m [])
.