在 Clojure 中将矢量转换为索引地图?

Converting vector to indexed map in Clojure?

假设我有以下地图矢量:

[{:name "Jack" :age 5}
{:name "Joe" :age 15}
{:name "Mare" :age 34}
{:name "William" :age 64}
{:name "Adolf" :age 34}]

我想将其转换为索引地图,例如:

{1 {:name "Jack" :age 5}
 2 {:name "Joe" :age 15}
 3 {:name "Mare" :age 34}
 4 {:name "William" :age 64}
 5 {:name "Adolf" :age 34}}

并且在某些时候,当我修改了索引地图后,我想将其转换回地图矢量。

怎么做?

zipmap 结合了一系列键和值,所以你可以这样做:

(zipmap (iterate inc 1) data-vector)

data-vector 是您的地图向量)

反过来基本上就是按键排序,然后取所有值,可以这样写:

(->> data-map
     (sort-by key)
     (map val))

您可以使用 map-indexed 将每个映射与其索引相关联,然后将其缩减为哈希映射: (reduce into {} (map-indexed #(assoc {} %1 %2) test))

如果您想回到第一个结构: (vec (vals your-indexed-map))