我在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}]
目前我有点难过如何做到这一点。
答案 0 :(得分: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
答案 1 :(得分:2)
知道了:
(defn transpose-lists [x]
(map (fn [m] (zipmap (keys x) m)) (apply map vector (vals x))))
不幸的是,它不保留键的顺序。 如果有人有更好的解决方案,那么我当然希望听到它!