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

时间:2015-06-05 14:21:33

标签: 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}
 5 {:name "Adolf" :age 34}}

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

怎么做?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

(zipmap (iterate inc 1) data-vector) 结合了一系列键和值,因此您可以这样做:

data-vector

(->> data-map (sort-by key) (map val)) 是你的地图矢量)

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

{{1}}