【问题标题】:Clojure : merging two vectors into one map with new keys and valuesClojure:将两个向量合并到一个带有新键和值的映射中
【发布时间】:2014-11-12 04:02:11
【问题描述】:

我有两个向量 [:v1 :v2 :v3] [:V1 :V2 :V3],我希望创建一个格式为的向量:

[ [:key "v1" :value "V1"]
  [:key "v2" :value "V2"]
  [:key "v3" :value "V3"]
  ]

【问题讨论】:

  • 你的标题说你想要一张地图。然而,这个问题将解决方案显示为一个向量。你真的想要{"v3" "V3", "v2" "V2", "v1" "V1"}吗?
  • 向量[:key "v1" :value "V1"] 没有键或值。它是四个平面值的索引序列:两个关键字与两个字符串交错。

标签: vector map clojure


【解决方案1】:
(mapv (fn [k v] [:key (name k) :value (name v)])
  [:v1 :v2 :v3] [:V1 :V2 :V3])

【讨论】:

  • 你毁了我让我的第一个 clojure 答案被接受的机会! :'-( 开玩笑的,+1
【解决方案2】:

为了多样性:

(into [] (zipmap (map name [:v1 :v2 :v3]) (map name [:V1 :V2 :V3])))

【讨论】:

  • zipmap 不保留序列的插入顺序;将其替换为 map vector?
【解决方案3】:

如果正如你的标题所暗示的那样,与你的问题文本相矛盾,你实际上想要地图{"v3" "V3", "v2" "V2", "v1" "V1"},那么

(zipmap [:v1 :v2 :v3] [:V1 :V2 :V3])

...会给你

{:v3 :V3, :v2 :V2, :v1 :V1}

您必须先将每个项目转换为其名称:

(->> [[:v1 :v2 :v3] [:V1 :V2 :V3]]
     (map (partial map name))
     (apply zipmap))

;{"v3" "V3", "v2" "V2", "v1" "V1"}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    相关资源
    最近更新 更多