【问题标题】:Clojure: convert vector of maps into map of maps with incremented keysClojure:将地图向量转换为具有递增键的地图地图
【发布时间】:2020-08-11 18:21:54
【问题描述】:

我有一个地图矢量

cards_vector = [{...} {...} ...]

还有一个原子

(def cards_map (atom {})

对于cards_vector 中的每个地图,我想使用键card-n 将地图添加到cards_map,其中n 从1 递增到count(cards_vector)。所以,cards-map 应该返回

{:card-1 {...}
 :card-2 {...}
 ...
 :card-n {...}}

【问题讨论】:

  • 为什么要用:card-X 作为键——card-maps 中还有什么?另外请添加您尝试过的代码以及它是如何失败的,以便我们对其进行改进。现在还不清楚,你在挣扎什么(提示:map-indexedreset!keyword
  • 你也可以使用(zipmap (map #(keyword (str "card-" (inc %))) (range)) data)

标签: clojure


【解决方案1】:

我提出这个sn-p:

(->> [{:a 1} {:b 2}]
     (map-indexed (fn [idx value] [(keyword (str "card-" idx)) value]))
     (into {}))
;; => {:card-0 {:a 1}, :card-1 {:b 2}}

但我同意cfrick的评论。选择形状为:card-X 的钥匙似乎不太实用。但你可以做到:)

【讨论】:

    【解决方案2】:

    另一种解决方案,更接近命令式编程,但效率可能低于地图索引:

    (into {} (for [k (range (count @cards_map))] [(keyword (str "card-" k)) (nth @cards_map k)]))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2014-10-07
      • 2014-10-28
      • 2012-11-30
      • 1970-01-01
      相关资源
      最近更新 更多