简单比较器不按(I)预期排序

Sta*_*ris 5 clojure

我期望这段代码片段能够生成原始向量,但是以不区分大小写的方式排序.相反,我得到原始矢量不变.为什么我的比较器不起作用?

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)