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…)可能无法维护它。