Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure按str和number排序?关键功能_Clojure - Fatal编程技术网

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的文档说它确实进行了稳定排序(即相等的元素不会被重新排序)。所以我相信你可以这么说。