Clojure:对序列的每个序列应用键
我是Clojure宇宙的新手,我有个问题。 我有一个懒洋洋的,看起来像这样(事实上更长) 我还将Clojure:对序列的每个序列应用键,clojure,Clojure,我是Clojure宇宙的新手,我有个问题。 我有一个懒洋洋的,看起来像这样(事实上更长) 我还将字段定义为 fields = [:Brand :Sale] 我希望至少最后有 ({:Brand "Brand1 :Sale "0"} {:Brand "Brand2 :Sale "15"} {:Brand "Brand3 :Sale "12"}) 我尝试了几种方法(应用、交织、减少、合并)但每次都得到了意想不到的结果 可能吗? 谢谢你说得对:你必须交错,然后将它们全部添加到地图中。但您应该为值中的
字段定义为
fields = [:Brand :Sale]
我希望至少最后有
({:Brand "Brand1 :Sale "0"} {:Brand "Brand2 :Sale "15"} {:Brand "Brand3 :Sale "12"})
我尝试了几种方法(应用、交织、减少、合并)但每次都得到了意想不到的结果
可能吗?
谢谢你说得对:你必须
交错,然后将它们全部添加到地图中。但您应该为值中的每个集合执行此操作。这意味着您需要使用map
:
(let [values '(("Brand1" "0") ("Brand2" "15") ("Brand3" "12"))
fields [:Brand :Sale]]
(map #(apply hash-map (interleave fields %)) values))
输出:
({:Sale "0", :Brand "Brand1"}
{:Sale "15", :Brand "Brand2"}
{:Sale "12", :Brand "Brand3"})
另一个变体是这样做:
(let [values '(("Brand1" "0") ("Brand2" "15") ("Brand3" "12"))
fields [:Brand :Sale]]
(map #(into {} (map vector fields %)) values))
您应该使用zipmap
(map (partial zipmap fields) values)
坦克很多,它起作用了!我完全错过了那件事,我应该复习一下这本书。我看到了代码的逻辑!圣诞快乐!使用zipmap
而不是apply hashmap…
谢谢,我试过这个东西,但不知道部分,也可以!这样更有效吗?
(map (partial zipmap fields) values)