2

我在 Clojure 中有以下数据结构

{:a [1 2 3]
 :b [4 5 6]
 :c [7 8 9]} 

我想把它转换成类似的东西

[{:a 1 :b 4 :c 7}
 {:a 2 :b 5 :c 8}
 {:a 3 :b 6 :c 9}]

目前,我对如何做到这一点有点困惑。

4

2 回答 2

3

在 Clojure 中,您永远无法保证转换后映射中键的顺序。它们是按键索引的,而不是按顺序索引的。

然而,向量是。并且get-in您可以使用坐标向量查找位置。

=> (def mat
     [[1 2 3]
      [4 5 6]
      [7 8 9]])

=> (defn transpose
     [m]
     (apply mapv vector m))

=> (get-in (transpose mat) [1 2])
8
于 2013-01-29T17:46:36.000 回答
2

知道了:

(defn transpose-lists [x] 
  (map (fn [m] (zipmap (keys x) m)) (apply map vector (vals x))))

不幸的是,它不保留键的顺序。如果有人有更好的解决方案,那么我当然想听听!

于 2013-01-29T13:02:52.923 回答