首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >闭字字母数字排序

问闭字字母数字排序
EN

Stack Overflow用户
提问于 2015-07-23 10:59:32
回答 2查看 885关注 0票数 2

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

代码语言:javascript
复制
(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")

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-23 11:04:55

不能比较数字和字符串。

代码语言:javascript
复制
=> (sort ["g" "a" "c" 4 6 1])
ClassCastException java.lang.String cannot be cast to java.lang.Number

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

代码语言:javascript
复制
=> (sort (map str ["g" "a" "c" 4 6 1]))
("1" "4" "6" "a" "c" "g")
票数 3
EN

Stack Overflow用户

发布于 2015-07-23 11:25:33

主要问题是不能以通用方式将字符串与数字进行比较:这些是不同类型的值。当有人问“什么更好:苹果还是房子?”时,第一个可能出现在脑海中的问题是“在哪方面更好?”您可以根据许多不同的属性对这两个对象进行排序,例如大小、成本或可食用性。sort不调用要使用的属性。

这就是 function进来的原因。首先,它需要一个keyfn,当对任何元素调用时,它都会产生其类似的属性:在我们的示例中,它是给定元素的字符串表示形式。然后,它接受一个集合,然后(可选)一个比较器。

因此,您使用str作为您的keyfn,并且不需要比较器,因为字符串的比较定义得很好。

生成的代码简单明了:

代码语言:javascript
复制
(sort-by str ["g" "a" "c" 4 6 1]) ; => (1 4 6 "a" "c" "g")
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31585419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档