clojure字母数字排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了clojure字母数字排序相关的知识,希望对你有一定的参考价值。

我可以使用排序对字母或数字进行排序,但如何对字母和数字进行排序。

(sort ["f" "g" "a" "b" "c"]) ; ==> ("a" "b" "c" "f" "g")

(sort [3 4 6 1 8 ])  ; ==> (1 3 4 6 8)

问题是,我该如何排序? ["g" "a" "c" 4 6 1]获得(1 4 6 "a" "c" "g")

答案

您无法比较数字和字符串。

=> (sort ["g" "a" "c" 4 6 1])
ClassCastException java.lang.String cannot be cast to java.lang.Number

所以要做你想做的事,你必须将数字转换为字符串然后排序。例如:

=> (sort (map str ["g" "a" "c" 4 6 1]))
("1" "4" "6" "a" "c" "g")
另一答案

主要问题是您无法以通用方式将字符串与数字进行比较:这些是不同类型的值。当有人说“什么更好:一个苹果或一个房子?”时,第一个可能出现在一个人心中的问题是“以什么方式更好?”您可以通过许多不同的属性对这两个对象进行排序,例如大小,成本或可编辑性。 sort没有打电话询问使用什么财产。

这就是sort-by function的用武之地。首先它需要一个keyfn,当调用任何元素时应该产生它的可比属性:在我们的例子中,它是给定元素的字符串表示。然后它需要一个集合,然后(可选)一个比较器。

所以你使用str作为你的keyfn并且你不需要比较器,因为字符串的比较是明确定义的。

生成的代码简单明了:

(sort-by str ["g" "a" "c" 4 6 1]) ; => (1 4 6 "a" "c" "g")

以上是关于clojure字母数字排序的主要内容,如果未能解决你的问题,请参考以下文章

嵌套 MySQL 查询和字母数字排序

按字母数字对javascript数组进行排序[重复]

如何在javascript中对字母数字数组进行排序[重复]

javascript 自己实现数字字母和中文的混合排序方法 by FungLeo

在Clojure中对数据的大矢量进行排序的最快方法

JAVA排序数字字母混合