0

我是 Clojure 的新手,我需要有关此功能的帮助。如果你能告诉我这个功能是做什么的以及它是如何工作的,我将非常感激。

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

2 回答 2

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}
于 2014-08-28T12:47:32.400 回答
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,您可以在官方文档ClojureDocs中找到解释,并附上源代码,其中还提供了示例。这两个网站都可以帮助您选择 Clojure 词汇表。

通常情况下,标准函数比上面的简单单行函数更快,但更复杂。

于 2014-08-28T13:30:15.187 回答