nic*_*bot 1 java sorting clojure map
如果这是最好的(或好的)解决方案,有人可以准确地解释它在做什么吗?
(sort
(reduce (fn [x [y z]] (assoc x y z)) {} (System/getProperties)))
Run Code Online (Sandbox Code Playgroud)
在何处可以使用它,例如打印系统属性:
(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))
Run Code Online (Sandbox Code Playgroud)
如果这不是一个好方法,请提供更好的方法.谢谢
我知道我能做到:
(doseq [nv (System/getProperties)] (pnv nv))
Run Code Online (Sandbox Code Playgroud)
但排序似乎不起作用:
(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)
Run Code Online (Sandbox Code Playgroud)
解决方案,由合金提供:
(doseq [nv (into (sorted-map) (System/getProperties))] (pnv nv))
Run Code Online (Sandbox Code Playgroud)
地图通常不会排序 - 当然,通过添加条目而获得的任何地图{}都不会.但是,Clojure和Java都提供了排序映射.因此,如果您想要一个具有默认排序顺序的有序地图,您可以这样做(into (sorted-map) the-other-map).这适用于java.util.Map以及Clojure类型,因此它应该是您所需要的.
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |