我希望这段代码片段能够生成原始向量,但是会以不区分大小写的方式排序。相反,我得到原始矢量不变。为什么我的比较器没有工作?
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")
答案 0 :(得分:15)
comparator
返回java.util.Comparator
。如果您明确使用compare
,则不需要它。所以只是:
(sort #(compare (str/upper-case %1) (str/upper-case %2))
["B" "a" "c" "F" "r" "E"])
;=> ("a" "B" "c" "E" "F" "r")
或者,使用sort-by
:
(sort-by str/upper-case ["B" "a" "c" "F" "r" "E"])
;=> ("a" "B" "c" "E" "F" "r")
答案 1 :(得分:1)
compare不是谓词,它是比较器。