1

次のようなネストされたマップがあります。

{"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のようなものが必要になると考えましたが、頭を包むことはできません。

4

3 に答える 3

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"})
于 2013-01-01T17:04:26.883 に答える
2

私は次のようなものを提案します:

(sort-by :name 
  (for [[n m] my-map] 
    (into m {:name n})))

これは、いくつかの便利なテクニックを利用します。

  • my-mapを[キー値]ペアに分割するための破壊
  • into値にすでにマップがあるため、値に追加するために使用できるという事実
  • リストを作成するための理解のためのA
  • sort-by最終結果を並べ替える
于 2013-01-02T00:00:33.123 に答える
2

あなたの目標が並べ替えられた順序で印刷することである場合は、単に並べ替えられたマップに入れてみませんか? (into (sorted-map) m).

于 2013-01-01T21:28:42.780 に答える