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)}
Другие вопросы по тегам