有谁可以解释为什么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
遍历向量的每个项目,然后返回结果?
答案 0 :(得分:2)
number?
会返回true
或false
,具体取决于输入是否为数字。 false
显然小于true
进行比较。
str
返回一个字符串,其值取决于输入。例如(str 1) => "1"
。字符串比较有点复杂,但一般来说,数字小于大写字母小于小写字母,字母按字母顺序排序。
我不确定你想要的行为,但似乎(sort-by number? ...)
确实“将矢量划分为字符串和数字”通过在列表的开头给你字符串和数字来确定结束。
如果您想要将字符串与数字分开,请使用(group-by number? ...)
关于您的第二个问题,sort-by
在合并排序期间使用keyfn
进行比较。