我期望这段代码片段能够生成原始向量,但是以不区分大小写的方式排序.相反,我得到原始矢量不变.为什么我的比较器不起作用?
user=> (ns user (require [clojure.contrib.string :as str]))
nil
user=> (sort
(comparator #(compare (str/upper-case %1) (str/upper-case %2)))
["B" "a" "c" "F" "r" "E"])
("B" "a" "c" "F" "r" "E")
Run Code Online (Sandbox Code Playgroud)
Jus*_*mer 15
comparatorjava.util.Comparator给定谓词(返回true或false的函数)时返回a .如果您compare明确使用,则不需要它.所以就:
(sort #(compare (str/upper-case %1) (str/upper-case %2))
["B" "a" "c" "F" "r" "E"])
;=> ("a" "B" "c" "E" "F" "r")
Run Code Online (Sandbox Code Playgroud)
或者,使用sort-by:
(sort-by str/upper-case ["B" "a" "c" "F" "r" "E"])
;=> ("a" "B" "c" "E" "F" "r")
Run Code Online (Sandbox Code Playgroud)