Map 在clojure中转换嵌套映射
我有一个嵌套的地图,看起来像这样:Map 在clojure中转换嵌套映射,map,clojure,traversal,Map,Clojure,Traversal,我有一个嵌套的地图,看起来像这样: {"a" {:points 2} "b" {:points 7} "c" {:points 1} "d" {:points 3}} 我想把它转换成一系列的地图,以便排序(使用排序依据),然后打印出来 ({:name "a" :points 2} {:name "b" :points 7} {:name "c" :points 1} {:name "d" :points 3}) 从文档中,我想我需要像postwalk这样的东西,但我不能把我的脑袋绕在它
{"a" {:points 2} "b" {:points 7} "c" {:points 1} "d" {:points 3}}
我想把它转换成一系列的地图,以便排序(使用排序依据),然后打印出来
({:name "a" :points 2}
{:name "b" :points 7}
{:name "c" :points 1}
{:name "d" :points 3})
从文档中,我想我需要像postwalk这样的东西,但我不能把我的脑袋绕在它周围。如果你的目标是按排序的顺序打印,为什么不干脆把它放在排序的地图上呢
(进入(已排序的地图)m)
如果您的目标是按已排序的顺序打印,为什么不简单地将其放入已排序的地图中<代码>(进入(排序地图)m)我建议如下:
(sort-by :name
(map #(conj {:name (key %)}
(val %))
{"a" {:points 2}
"b" {:points 7}
"c" {:points 1}
"d" {:points 3}}))
-> ({:points 2, :name "a"}
{:points 7, :name "b"}
{:points 1, :name "c"}
{:points 3, :name "d"})
(sort-by :name
(for [[n m] my-map]
(into m {:name n})))
这利用了一些方便的技术:
- 分解结构以将我的地图分解为[键值]对
- 事实上,您的值中已经有映射,因此您可以使用
添加到这些值中进入
- 建立列表的一种理解方法
对最终结果进行排序按排序
- 我建议如下:
(sort-by :name
(for [[n m] my-map]
(into m {:name n})))
这利用了一些方便的技术:
- 分解结构以将我的地图分解为[键值]对
- 事实上,您的值中已经有映射,因此您可以使用
添加到这些值中进入
- 建立列表的一种理解方法
对最终结果进行排序按排序