[英]clojure 101 combining vectors into a map
我对Clojure很新,似乎无法找到一种方法来做一些我确定无关紧要的事情。 我已经查看了assoc
函数,因为我认为这可能是答案,但无法使其工作。
是)我有的:
keys => [:num, :name, :age]
people => [ [1, "tim", 31] [2, "bob" 33] [3, "joe", 44] ]
我想要做的是创建一个地图矢量,每个地图看起来像
[ { :num 1, :name "tim", :age 31 }
{ :num 2, :name "bob", :age 33 }
{ :num 3, :name "joe", :age 44 } ]
我的OO大脑要我写一堆循环,但我知道有一个更好的方法我只是在大API中丢失了一点。
试试这个:
(def ks [:num :name :age])
(def people [[1 "tim" 31] [2 "bob" 33] [3 "joe" 44]])
(map #(zipmap ks %) people)
=> ({:num 1, :name "tim", :age 31}
{:num 2, :name "bob", :age 33}
{:num 3, :name "joe", :age 44})
请注意,我使用ks
代替keys
来命名键,因为keys
是Clojure中的内置过程,重新定义它是一个坏主意。 还要注意map
返回一个惰性序列; 如果你绝对需要一个向量,那么这样做:
(vec (map #(zipmap ks %) people))
=> [{:num 1, :name "tim", :age 31}
{:num 2, :name "bob", :age 33}
{:num 3, :name "joe", :age 44}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.