2013-07-20 44 views
6

我敢肯定這很容易,但我懷疑我會有很多小問題在通向idomatic clojure的路上。也許我錯過了一些東西,但看着clojure地圖頁面,我沒有找到解決方案。創建地圖,當你有一個向量的鍵和值

給定兩個向量(其他值的關鍵之一)如何有效地(關鍵詞!)創建一個從鍵到值的映射?

的鍵和值都低於:

(:year :month :day) (core/split "2013-02-18" #"-") 

回答

16

自然的解決方案是使用zipmap

(zipmap [:year :month :day] (clojure.string/split "2013-02-18" #"-")) 
;= {:day "18", :month "02", :year "2013"} 

對於這樣的小地圖,它實際上是相當有效的。對於更大的地圖,你想要zipmap使用瞬變,它目前沒有。 JIRA中有一張票,附有我的補丁:CLJ-1005

當然,它足夠簡單,可以將啓用瞬態的zipmap包含在自己的代碼庫中,並優先於clojure.core中的代碼。如果你正在壓縮更大的地圖,這是一個非常重要的事情。

可以從修補程序或從ClojureScript核心庫複製代碼,該庫使用其zipmap中的瞬變;這裏是到版本1844的ClojureScript source的鏈接(這個特殊的功能可以在Clojure中使用,不需要改變)。

+0

很好的答案謝謝你。 Clojure到目前爲止是一個爆炸,我覺得自己正在從面向對象編程的面紗中釋放出來...... – Core