我有一个嵌套的地图,看起来像这样:
{"a" {:points 2} "b" {:points 7} "c" {:points 1} "d" {:points 3}}
我想把它变成一个地图序列,以便排序(使用 sort-by )并在之后打印。
({:name "a" :points 2}
{:name "b" :points 7}
{:name "c" :points 1}
{:name "d" :points 3})
从文档中我发现我需要像 postwalk 这样的东西,但我无法绕过它。
答案 0 :(得分:6)
(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"})
答案 1 :(得分:2)
如果您的目标是按排序顺序打印,为什么不简单地将其放入有序地图? (into (sorted-map) m)
。
答案 2 :(得分:2)
我建议像:
(sort-by :name
(for [[n m] my-map]
(into m {:name n})))
这使用了一些方便的技术:
into
添加地图sort-by
对最终结果进行排序