8

我确信这很容易,但我怀疑在通向 idomatic clojure 的道路上我会有很多小问题。也许我错过了一些东西,但查看 clojure 地图页面,我没有找到解决方案。

给定两个向量(一个键和一个值),你如何有效地(关键字!)创建一个从键到值的映射?

键和值如下:

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

2 回答 2

20

自然的解决方案是使用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 源代码的链接(这个特定的函数可以在 Clojure 中使用而无需更改)。

于 2013-07-20T09:16:22.050 回答
2

您正在寻找的是zipmap

于 2013-07-20T09:17:09.413 回答