所以我有一個載體,它看起來有點像這樣從矢量
["John" 23 "5551234" "Sally" 34 "5556667"]
載體含有很多像這樣的項目,我試圖做的就是像圖的矢量建立一個地圖這個:
[{:name "John" :age 23 :ph "5551234"} {:name "Sally" :age 34 :ph "5556667"}]
有沒有辦法做到這一點?
所以我有一個載體,它看起來有點像這樣從矢量
["John" 23 "5551234" "Sally" 34 "5556667"]
載體含有很多像這樣的項目,我試圖做的就是像圖的矢量建立一個地圖這個:
[{:name "John" :age 23 :ph "5551234"} {:name "Sally" :age 34 :ph "5556667"}]
有沒有辦法做到這一點?
(def sample ["John" 23 "5551234" "Sally" 34 "5556667" "Harry" 42 "5554242"])
將輸入向量劃分爲使用例如記錄的記錄。 (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"}]
或者使用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"})
注意鍵順序沒有爲地圖定義。 for
comphrehension使用數組映射,因爲鍵值對的數量很小,因此鍵的順序依次出現,但這是一個實現細節。如果順序很重要,可以顯式使用數組映射,但在較大的映射上查找性能會受到影響。
另外一對夫婦選擇:
(->> ["John" 23 "5551234" "Sally" 34 "5556667"]
(partition 3)
(map (fn [[name age ph]]
{:name name :age age :ph ph})))
(->> ["John" 23 "5551234" "Sally" 34 "5556667"]
(partition 3)
(map (partial interleave [:name :age :ph]))
(map (partial apply hash-map)))
你如何讓你的記錄?那是你將它們作爲分隔數據閱讀,還是按照所示構建它們? – octopusgrabbus
我把它們從網站上刮下來 – Jeroko
謝謝。我想你沒有以分隔的形式獲得記錄。 – octopusgrabbus