Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 在地图列表中重新排序地图中的键_Clojure - Fatal编程技术网

Clojure 在地图列表中重新排序地图中的键

Clojure 在地图列表中重新排序地图中的键,clojure,Clojure,我有一个函数,它输出一个地图列表,如下所示: ({:size20160721 "19.94 GB", :size20160720 "19.94 GB", :size20160719 "100 GB", :directory_path "/user/1 "} {:size20160721 "1 GB", :size20160720 "4 GB", :size20160719 "10 GB", :directory_path "/user/2 "} ... ) 如何重新排列此映射列表,使每个

我有一个函数,它输出一个地图列表,如下所示:

({:size20160721 "19.94 GB", :size20160720 "19.94 GB", :size20160719 "100 GB", :directory_path "/user/1 "}
 {:size20160721 "1 GB", :size20160720 "4 GB", :size20160719 "10 GB", :directory_path "/user/2 "}
 ...
 )

如何重新排列此映射列表,使每个映射都有:directory\u path first,后跟:size键,其数量可以是可变的,但对于所有路径都是相同的?

使用
排序映射by
,比较器将始终首先设置
:directory\u path

user> 
(def data '({:size20160721 "19.94 GB", :size20160720 "19.94 GB",
             :size20160719 "100 GB", :directory_path "/user/1 "}
            {:size20160721 "1 GB", :size20160720 "4 GB",
             :size20160719 "10 GB", :directory_path "/user/2 "}))
;; #'user/data

user> 
(def dirfirst (sorted-map-by #(cond (= :directory_path %1) -1
                                    (= :directory_path %2) 1
                                    :else (compare %1 %2))))
;; #'user/dirfirst

user> (map (partial into dirfirst) data)

;; ({:directory_path "/user/1 ", :size20160719 "100 GB", 
;;   :size20160720 "19.94 GB", :size20160721 "19.94 GB"}
;;  {:directory_path "/user/2 ", :size20160719 "10 GB", 
;;   :size20160720 "4 GB", :size20160721 "1 GB"})

这只是从映射中删除:directory\u path键。还是我犯了什么错误?你能把你的尝试贴出来吗?你能在repl中运行我的示例吗。它还会失败吗?