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}]
現時点では、これを行う方法についてちょっと困惑しています。
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}]
現時点では、これを行う方法についてちょっと困惑しています。
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
とった:
(defn transpose-lists [x]
(map (fn [m] (zipmap (keys x) m)) (apply map vector (vals x))))
残念ながら、キーの順序は保持されません。誰かがより良い解決策を持っているなら、もちろん私はそれを聞きたいです!