我确信这很容易,但我怀疑在通往idomatic clojure的道路上我会有很多小问题。也许我错过了一些东西,但看着clojure地图页面,我找不到解决方案。
给定两个向量(其中一个键是值),你如何有效地(关键词!)创建一个从键到值的映射?
键和值如下:
(:year :month :day) (core/split "2013-02-18" #"-")
答案 0 :(得分:17)
自然的解决方案是使用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核心库复制代码,ClojureScript核心库在zipmap
中使用瞬态;这里是1844年版本ClojureScript source的链接(这个特殊功能可以在Clojure中使用而不做任何更改)。
答案 1 :(得分:2)
您要找的是zipmap