在Clojure中将关键字键HashMap转换为字符串键HashMap
将Clojure关键字键哈希表转换为字符串键哈希表
输入数据结构:
{:a {:x 1 :y 2} :b {:w 1 :z 2} :c {:m 1 :n 2}}
期望输出:
{"a" {:x 1 :y 2} "b" {:w 1 :z 2} "c" {:m 1 :n 2}}
两种实用解法
- 方法一:使用
reduce和assoc
(def original {:a {:x 1 :y 2} :b {:w 1 :z 2} :c {:m 1 :n 2}}) (def converted (reduce (fn [acc [k v]] (assoc acc (name k) v)) {} original))
通过reduce遍历原哈希表的每一组键值对,用name函数将关键字类型的键转换为字符串,再通过assoc将新的键值对存入空哈希表中,最终得到目标结构。
- 方法二:使用
into和map(更简洁)
(def original {:a {:x 1 :y 2} :b {:w 1 :z 2} :c {:m 1 :n 2}}) (def converted (into {} (map (fn [[k v]] [(name k) v]) original)))
先用map把原哈希表的每个键值对转换为「字符串键+原值」的结构,再通过into {}将转换后的序列直接构建成哈希表,写法更紧凑。
注意:上述两种方法仅转换顶层的关键字键,内层嵌套的关键字(如:x、:w等)会保持原样,完全符合需求。
内容的提问来源于stack exchange,提问作者Yavuz Kuru
相关产品推荐
相关产品推荐

