[{:key "key_1" :value "value_1"}, {:key "key_2" :value "value_2"}]
的時候,我想將其轉換爲:
{"key_1" "value_1" "key_2" "value_2"}
一個函數來完成,這將是:
(defn long->wide [xs]
(apply hash-map (flatten (map vals xs))))
我可以使用線程宏來簡化它:
(defn long->wide [xs]
(->> xs
(map vals)
(flatten)
(apply hash-map)))
這仍然需要函數參數的明確定義,除了傳遞給第一個函數之外,我沒有做任何其他的事情。那麼我可能會重寫這個使用comp
刪除此:
(def long->wide
(comp (partial apply hash-map) flatten (partial map vals)))
然而,這需要重複使用的partial
這對我來說是在功能的很大的噪音。
有Clojure中,結合comp
和->>
,所以我可以創造一個更高階功能,無需重複使用的部分,也該出去不必創建一個新的功能的一些功能?
如果你想要去的自由點,這將是一個選擇:'(部分爲{}(圖(juxt:鍵:值)))' – cfrick
也'(瓦爾斯{:值「v1」:key「k1」})'(vs'(= {:value「v1」:key「k1」} {:key「k1」:value「v1」})')是危險的,沒有訂購(小的是「意外」) – cfrick
@ cfrick的功能是可取的。如果你的數據顯示爲[{:value「value_1」:key「key_1」} {:value「value_2」,:key「key_2」}]',你的'(long-> wide data)'產生'{「 value_1「」key_1「,」value_2「」key_2「}'。謹防「扁平化」! – Thumbnail