如果这是最好的(或好的)解决方案,请问有人能确切解释它在做什么吗?

(sort
  (reduce (fn [x [y z]] (assoc x y z)) {} (System/getProperties)))


可以使用它的地方,例如打印系统属性:

(def p
  (sort
    (reduce (fn [x [y z]] (assoc x y z)) {} (System/getProperties))))

(defn pnv [nv] (println (str (key nv) "=\"" (val nv) "\"")))

(doseq [nv p] (pnv nv))


如果那不是一个好的方法,请提供一个更好的方法。谢谢

我知道我可以做到:

(doseq [nv (System/getProperties)] (pnv nv))


但是排序似乎不起作用:

(doseq [nv (sort (System/getProperties))] (pnv nv))
ClassCastException java.util.Hashtable$Entry cannot be cast to java.lang.Comparable  clojure.lang.Util.compare (Util.java:104)


解决方案,由amalloy提供:

(doseq [nv (into (sorted-map) (System/getProperties))] (pnv nv))

最佳答案

地图通常不会排序-当然,通过添加条目到{}所获得的任何地图都不会。但是,Clojure和Java都提供排序的映射。因此,如果要使用默认的排序顺序对地图进行排序,则可以执行(into (sorted-map) the-other-map)。这适用于java.util.Map以及Clojure类型,因此应该是您所需要的。

10-07 17:00