从矢量建立一个地图

Jer*_*oko 1 functional-programming clojure

所以我有一个看起来像这样的矢量

["John" 23 "5551234" "Sally" 34 "5556667"]
Run Code Online (Sandbox Code Playgroud)

向量包含更多这样的条目,我想要做的是制作这样的地图矢量:

[{:name "John" :age 23 :ph "5551234"} {:name "Sally" :age 34 :ph "5556667"}]
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这个目标?

A. *_*ebb 10

(def sample ["John" 23 "5551234" "Sally" 34 "5556667" "Harry" 42 "5554242"])
Run Code Online (Sandbox Code Playgroud)

使用例如(partition 3 sample)(每个记录有3个元素)然后将输入向量分区为记录

映射zipmap:

(mapv #(zipmap [:name :age :ph] %) (partition 3 sample))
; => [{:ph "5551234", :age 23, :name "John"} 
;     {:ph "5556667", :age 34, :name "Sally"}
;     {:ph "5554242", :age 42, :name "Harry"}]
Run Code Online (Sandbox Code Playgroud)

或者使用for理解(返回一个懒惰的序列而不是一个向量):

(for [[name age ph] (partition 3 sample)] {:name name :age age :ph ph})
; => ({:name "John", :age 23, :ph "5551234"} 
      {:name "Sally", :age 34, :ph "5556667"} 
      {:name "Harry", :age 42, :ph "5554242"})
Run Code Online (Sandbox Code Playgroud)

注意没有为地图定义键顺序.所述forcomphrehension是使用阵列地图因为键-值对的数目是小的,并且因此出现键,以便,但是这是一个实现细节.如果顺序很重要,您可以显式使用数组映射,但对较大地图上的查找会有性能损失.