如何将嵌套向量转换为向量映射?

ezz*_*ato 1 clojure

鉴于我有以下形式:

(def data-points [[1483249740 "ONE"]
                  [1483249680 "TWO"]
                  [1483249620 "THREE"]
                  [1483249560 "FOUR"]])
Run Code Online (Sandbox Code Playgroud)

如何将此数据转换为此数据?

{:data  [1483249740 1483249680 1483249620 1483249560] 
 :value ["ONE" "TWO" "THREE" "FOUR"]}
Run Code Online (Sandbox Code Playgroud)

我也想知道如何处理类似的问题.你有什么方法可以解决这个问题,以及我需要知道哪些函数来转换任何数据.

我是clojure的新手,并没有找到满意的解决方案.
谢谢

lee*_*ski 7

我会用这个:

(zipmap [:data :value] (apply map vector data-points))

;;=> {:data [1483249740 1483249680 1483249620 1483249560], 
;;    :value ["ONE" "TWO" "THREE" "FOUR"]}
Run Code Online (Sandbox Code Playgroud)

它对数据集合使用单次传递,但比减少更简洁,但在性能方面不应该有所不同

该片段(apply map vector data)是一种在clojure中转置矩阵的惯用方法(在您的情况下,它是您需要的,因为它将列转换为行)

user> (apply map vector [[:a 1] [:b 2] [:c 3]])
;;=> ([:a :b :c] [1 2 3])
Run Code Online (Sandbox Code Playgroud)