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是使用阵列地图因为键-值对的数目是小的,并且因此出现键,以便,但是这是一个实现细节.如果顺序很重要,您可以显式使用数组映射,但对较大地图上的查找会有性能损失.