Clojure用str和number排序? keyfunctions

时间:2015-09-24 20:38:11

标签: clojure

有谁可以解释为什么sort-by会对这些关键功能做出这样的反应?

user=> (sort-by number? [1 2 13 4 "s" 0 "a"])
("s" "a" 1 2 13 4 0)

user=> (sort-by str [1 2 3 4 "s" 0 "a"])
(0 1 2 3 4 "a" "s")

我的想法是将矢量的args分为字符串和数字?还有什么更多关于这里发生了什么? 我的第二个问题是sort-by遍历向量的每个项目,然后返回结果?

1 个答案:

答案 0 :(得分:2)

number?会返回truefalse,具体取决于输入是否为数字。 false显然小于true进行比较。

str返回一个字符串,其值取决于输入。例如(str 1) => "1"。字符串比较有点复杂,但一般来说,数字小于大写字母小于小写字母,字母按字母顺序排序。

我不确定你想要的行为,但似乎(sort-by number? ...)确实“将矢量划分为字符串和数字”通过在列表的开头给你字符串和数字来确定结束。

如果您想要将字符串与数字分开,请使用(group-by number? ...)

关于您的第二个问题,sort-by在合并排序期间使用keyfn进行比较。