我在使用带有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)
假设您想要使用现有地图对键进行排序,您可以使用into:
(into (sorted-map-by >) {1 "ab" 3 "cs" 2 "vs"})
Run Code Online (Sandbox Code Playgroud)
这工作,因为(sorted-map-by >)返回一个空的有序映射,所以使用的功能,如into与assoc预期而地图保持排定的顺序将工作.
;=> {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)
并且它试图使每个其他一个值成为前一个键,因此错误.
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |