【问题标题】:Constructing a map from a vector in Clojure在 Clojure 中从向量构造地图
【发布时间】:2013-08-29 14:29:00
【问题描述】:

我有一个看起来像这样的向量:

["Config" "{}" "Auth" "{}" "Other" "{}"]

我想把每个键值对变成下面的映射:

{"Config" "{}", "Auth" "{}", "Other" "{}"}

如何使用 Clojure 做到这一点?有没有内置函数可以做到这一点?

【问题讨论】:

  • 刚刚得到答案,(apply assoc {} ["Config" "{}" "Auth" "{}" "Other" "{}"])。有更好的吗?

标签: clojure


【解决方案1】:

使用apply 将所需类型的映射构造函数应用于向量,即:

(apply hash-map ["Config" "{}" "Auth" "{}" "Other" "{}"])

编辑

根据this answer,您可以根据评估{}的方式获得不同的地图类型,因此请使用适合您需要的地图构造函数。

编辑

查看this 文字{} 返回的不同对象类型似乎是一个错误。

【讨论】:

  • 谢谢,干得好!把问题留得久一点,我不喜欢太早接受答案,以防有人错过了什么。
  • "如果您想准确地模拟 {} 所做的事情,请使用 array-map 而不是 hash-map。"正如当前实现的那样,具有常量键和值的文字映射 {} 表达式也将被解析为哈希映射(尽管被混淆为数组映射)。请注意,文字 {:a 1, :b 2, :c 3} 的键顺序不受尊重(在 1.5 版中)。
  • @A.Webb (type x) 结果建议我。为什么它给出不同的值呢?由于那个令人困惑的评估?
  • @A.Webb 你是对的,它确实被评估为数组映射。编辑了答案。这种行为有什么原因吗?
  • 试试(def m {:a 1 :b 2 :c 3})。然后,(type m) ;=> clojure.lang.PersistentHashMap,但(type (eval m)) ;=> clojure.lang.PersistentArrayMap。和(second m) => [:c 3]。我不相信这是故意的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
相关资源
最近更新 更多