我是Clojure的新手,我需要这个功能的帮助。如果你能告诉我这个功能是做什么的,它是如何工作的,我真的很感激。
(defn zip-map
[k v]
(into{} (map vec (partition 2 (interleave k v)))))
答案 0 :(得分:8)
使用示例:
(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}
答案 1 :(得分:2)
功能更复杂,因此难以理解。因此可以这样写:
(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
,您可以在official docs或ClojureDocs中找到完整的源代码,并提供示例。这两个网站都可以帮助您通过Clojure词汇表进行选择。
通常情况下,标准功能比上面的简单单线程更快,但更复杂。