【问题标题】:Converting vector to indexed map in Clojure?在 Clojure 中将向量转换为索引图?
【发布时间】:2015-06-05 14:21:33
【问题描述】:

假设我有以下地图矢量:

[{: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}}

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

怎么做?

【问题讨论】:

    标签: dictionary vector clojure


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      (zipmap (iterate inc 1) data-vector)
      

      data-vector 是您的地图矢量)

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

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

      【讨论】:

      • zipmaps 有意义并解决了第一次转换,谢谢!但是,guillaume ERETEO 提到的反向操作对我来说更容易理解:(vec (vals your-indexed-map))。
      • 使用哪种解决方案取决于您是否希望按照键给定的顺序获取地图。 (vec (vals ...)) 可能不会维护它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多