在 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))
假设我有以下地图矢量:
[{: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))