Clojure按str和number排序?关键功能
有人能解释一下为什么Clojure按str和number排序?关键功能,clojure,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") 我的想法是将向量的arg分为字符串和数字?关于这里发生的事情还有什么吗? 我的第二个问题是,按排序,遍历向量的每一项,然后返回结果?数字?根据输入是否为数字返回真
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")
我的想法是将向量的arg分为字符串和数字?关于这里发生的事情还有什么吗?
我的第二个问题是,
按
排序,遍历向量的每一项,然后返回结果?数字?
根据输入是否为数字返回真
或假
<对于比较而言,code>false明显小于true
str
返回一个字符串,其值取决于输入。e、 g.(str1)=>“1”
。字符串比较有点复杂,但一般来说,数字小于大写字母小于小写字母,字母按字母顺序排序
我不确定您想要的行为是否准确,但似乎(按数字排序?…)
确实“将向量划分为字符串和数字”,在列表的开头给您字符串,在末尾给您数字
如果要将字符串与数字分开,请使用(按数字分组?…)
至于你的第二个问题,
sort by
在合并排序过程中使用keyfn
进行比较。这很有趣,我不知道也可以使用true-false-nil进行比较:user=>(compare-nil-false)-1
user=>(compare-true-false)1我无法得到的是数字?
str
将输入转换为字符串,它是可比较的,但是number?
返回true-false,类似于(nil数组.sort的文档说它确实进行了稳定排序(即相等的元素不会被重新排序)。所以我相信你可以这么说。