Clojure:对序列的每个序列应用键

Clojure:对序列的每个序列应用键,clojure,Clojure,我是Clojure宇宙的新手,我有个问题。 我有一个懒洋洋的,看起来像这样(事实上更长) 我还将字段定义为 fields = [:Brand :Sale] 我希望至少最后有 ({:Brand "Brand1 :Sale "0"} {:Brand "Brand2 :Sale "15"} {:Brand "Brand3 :Sale "12"}) 我尝试了几种方法(应用、交织、减少、合并)但每次都得到了意想不到的结果 可能吗? 谢谢你说得对:你必须交错,然后将它们全部添加到地图中。但您应该为值中的

我是Clojure宇宙的新手,我有个问题。 我有一个懒洋洋的,看起来像这样(事实上更长)

我还将
字段定义为

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)