2011-08-12 110 views
37

我是clojure初學者。我如何從lazySeq創建地圖?clojure將lazy-seq轉換爲散列圖

(def fields [:name :age :color]) 
(def values ["joe" 32 "red"]) 
(def record (interleave fields values)) 

(def mymap (into {} record)) ;; ???? 

;; (get mymap :age) 
;; 32 

回答

77

爲了回答您的實際問題:

(apply hash-map record) 

但因爲你實際上已經有獨立的鍵和值,你可以使用

(zipmap fields values) 

或者,如果你有你的心臟上into設置,你可以

(into {} (map vector fields values)) 
+2

感謝展示等方式來做到這一點的! –

1

這是不理智可言,但由於原來的問題想用intorecord

(into {} (map vec (partition 2 record)))

+0

這種選擇方式不明智(不是一個修辭問題,一個真正的問題)?是因爲它比其他選擇更長和/或更復雜,也就是說,它「圍繞布什跳動?」 –

+0

它也默默地丟下了一個值,而不是拋出一個異常,如果「記錄」出乎意料地有奇數個元素。儘管經過反思,我想使用單獨的鍵和值序列的解決方案也有類似的問題。 – amalloy