我可以使用排序对字母或数字进行排序,但如何对字母和数字进行排序.
(sort ["f" "g" "a" "b" "c"]) ; ==> ("a" "b" "c" "f" "g")
(sort [3 4 6 1 8 ]) ; ==> (1 3 4 6 8)
Run Code Online (Sandbox Code Playgroud)
问题是,我该如何排序?["g" "a" "c" 4 6 1]要得到(1 4 6 "a" "c" "g")
D-s*_*ide 14
主要问题是您无法以通用方式将字符串与数字进行比较:这些是不同类型的值.当有人说"什么更好:一个苹果或一个房子?"时,第一个可能出现在一个人心中的问题是"以什么方式更好?" 您可以通过许多不同的属性对这两个对象进行排序,例如大小,成本或可编辑性.sort没有关于使用什么属性的电话.
这就是sort-by函数的用武之地.首先它需要一个keyfn,当调用任何元素时,应该产生它的可比属性:在我们的例子中,它是给定元素的字符串表示.然后它需要一个集合,然后(可选)一个比较器.
所以你str用作你的keyfn,你不需要比较器,因为字符串的比较是明确定义的.
生成的代码简单明了:
(sort-by str ["g" "a" "c" 4 6 1]) ; => (1 4 6 "a" "c" "g")
Run Code Online (Sandbox Code Playgroud)