无法获得sort-map-by并一起应用工作

mur*_*a52 1 clojure

我在使用带有sorted-map-by和apply的自定义比较器时遇到了问题.如何使下面的表达式工作 -

(apply sorted-map-by > {1 "ab" 3 "cs" 2 "vs"})
Run Code Online (Sandbox Code Playgroud)

我得到以下例外 -

IllegalArgumentException没有为key提供的值:[3"cs"] clojure.lang.PersistentTreeMap.create(PersistentTreeMap.java:87)

A. *_*ebb 5

假设您想要使用现有地图对键进行排序,您可以使用into:

(into (sorted-map-by >) {1 "ab" 3 "cs" 2 "vs"})
Run Code Online (Sandbox Code Playgroud)

这工作,因为(sorted-map-by >)返回一个空的有序映射,所以使用的功能,如intoassoc预期而地图保持排定的顺序将工作.

;=> {3 "cs", 2 "vs", 1 "ab"}
Run Code Online (Sandbox Code Playgroud)

sorted-map-by函数适用于平面参数:

(sorted-map-by > 1 "ab" 3 "cs" 2 "vs")
;=> {3 "cs", 2 "vs", 1 "ab"}
Run Code Online (Sandbox Code Playgroud)

将它应用于此地图会产生奇数对:

(apply list {1 "ab" 3 "cs" 2 "vs"})
;=> ([1 "ab"] [2 "vs"] [3 "cs"])
Run Code Online (Sandbox Code Playgroud)

并且它试图使每个其他一个值成为前一个键,因此错误.