我是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
我是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
爲了回答您的實際問題:
(apply hash-map record)
但因爲你實際上已經有獨立的鍵和值,你可以使用
(zipmap fields values)
或者,如果你有你的心臟上into
設置,你可以
(into {} (map vector fields values))
這是不理智可言,但由於原來的問題想用into
與record
:
(into {} (map vec (partition 2 record)))
這種選擇方式不明智(不是一個修辭問題,一個真正的問題)?是因爲它比其他選擇更長和/或更復雜,也就是說,它「圍繞布什跳動?」 –
它也默默地丟下了一個值,而不是拋出一個異常,如果「記錄」出乎意料地有奇數個元素。儘管經過反思,我想使用單獨的鍵和值序列的解決方案也有類似的問題。 – amalloy
感謝展示等方式來做到這一點的! –