Что делает zip-карта Clojure?

Я новичок в Clojure, и мне нужна помощь с этой функцией. Если бы вы могли сказать мне, что эта функция делает и как она работает, я был бы очень благодарен.

(defn zip-map
  [k v]
    (into{} (map vec (partition 2 (interleave k v)))))

2 ответа

Решение

Пример использования:

(zip-map [:a :b :c] [1 2 3]) ;=> {:a 1, :b 2, :c 3}    

И изнутри:

(interleave [:a :b :c] [1 2 3]) ;=> (:a 1 :b 2 :c 3)
(partition 2 '(:a 1 :b 2 :c 3)) ;=> ((:a 1) (:b 2) (:c 3))
(map vec '((:a 1) (:b 2) (:c 3))) ;=> ([:a 1] [:b 2] [:c 3])
(into {} '([:a 1] [:b 2] [:c 3])) ;=> {:a 1, :b 2, :c 3}

Функция является более сложной, поэтому ее сложнее понять, чем нужно. Это можно написать так:

(defn zip-map [ks vs]
  (into {} (map vector ks vs)))

когда

(zip-map [:a :b :c] [1 2 3])
;{:a 1, :b 2, :c 3}

как прежде.

Функция имитирует стандарт zipmapВы можете найти объяснение, в комплекте с исходным кодом, в официальных документах или ClojureDocs, который также дает примеры. Оба этих сайта помогут вам выбрать свой словарь Clojure.

Как это часто бывает, стандартная функция быстрее, хотя и сложнее, чем простая однострочная строка выше.

Другие вопросы по тегам