zipmap с многозначными ключами
Следующие:
(zipmap '(:a :b :c :c) '(1 2 3 4))
добивается: {:c 4, :b 2, :a 1}
Я хотел бы получить:
{:c '(3 4) :b '(2) :a '(1)}
вместо.
Как я должен определить свой собственный zipmap
что берет два списка и возвращает карту с несколькими значениями для ключей?
1 ответ
Решение
Это будет делать
(defn zippy [l1 l2]
(apply merge-with concat (map (fn [a b]{a (list b)}) l1 l2)))
;;; ⇒ #'user/zippy
(zippy '(:a :b :c :c) '(1 2 3 4))
;;; ⇒ {:c (3 4), :b (2), :a (1)}