Dictionary 在Clojure中将向量转换为索引映射?

Dictionary 在Clojure中将向量转换为索引映射?,dictionary,vector,clojure,Dictionary,Vector,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

假设我有以下地图向量:

[{: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-map
     (sort-by key)
     (map val))

zipmap
组合了一系列键和值,因此您可以执行以下操作:

(zipmap (iterate inc 1) data-vector)
(使用
数据向量
作为地图向量)

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

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

您可以使用
映射索引
将每个映射与其索引关联,然后将其缩减为哈希映射:
(简化为{}(映射索引#(assoc{}%1%2)测试))

如果要返回到第一个结构:
(vec(vals-your-indexed-map))
您可以使用
map-indexed
将每个映射与其索引关联,然后将其缩减为哈希映射:
(简化为{}(映射索引#(assoc{}%1%2)测试))

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

zipmaps很有意义,解决了第一次转换,谢谢!然而,guillaume ERETEO提到的反向操作对我来说更容易理解:(vec(vals-your-indexed-map))。使用哪种解决方案取决于您是否希望按照键给出的顺序创建映射<代码>(vec(VAL…)可能无法维护它。zipmaps很有意义,可以解决第一次转换,谢谢!然而,guillaume ERETEO提到的反向操作对我来说更容易理解:(vec(vals-your-indexed-map))。使用哪种解决方案取决于您是否希望按照键给出的顺序创建映射<代码>(vec(VAL…)可能无法维护它。