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

时间:2011-04-14 15:30:38

标签: 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")

2 个答案:

答案 0 :(得分:15)

给定谓词(返回true或false的函数)时,

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不是谓词,它是比较器。