kotlin - 为什么 Kotlin 不对我的数组的第一个元素进行排序?
问题描述
也许我在这里遗漏了一些东西,但似乎 sort 并没有完全对数组进行排序。
这是我尝试过的:
$ kotlinc
Welcome to Kotlin version 1.2.71 (JRE 10.0.2+13-Ubuntu-1ubuntu0.18.04.2)
Type :help for help, :quit for quit
>>> var test: String = "This is a test of the user system."
>>> var testarray2: Array<String> = test.split(" ").toTypedArray()
>>> testarray2.sort()
>>> testarray2.forEach { println("${it} ") }
This
a
is
of
system.
test
the
user
>>>
如您所见,排序似乎不是对字符串“This”进行排序。
我尝试安装 openjdk-11 并更新我所有的包,但我仍然得到这个,我检查了 1.2.71 是最新的 Kotlin 包。
难道我做错了什么?
先感谢您。
解决方案
如果你做这样的排序:
testarray2.sortBy { it.toLowerCase() }
它将按照您的需要进行排序。
该sort()
方法使用字符的 ASCII 代码比较字符串,并且所有大写字符的 ASCII 代码都小于小写字符,因此您得到的结果在您看来是错误的。
另一方面,it.toLowerCase()
将在排序之前将所有字符串转换为小写,因此您可以进行不区分大小写的排序。
推荐阅读
- environment-variables - 上传到 Zeit/Now 时客户端中暴露的 Nuxt 环境变量
- sql - 将 JSON 文件读入表中
- angular - 无法绑定到“xxx”,因为它不是“tag yyy”剑道角度下拉列表的已知属性
- c# - Xamarin Forms ListView:程序选择和自定义渲染器的问题
- vue.js - 如何在选定的元素更改时自动关闭日期弹出窗口并隐藏 div?
- ssms - 如何在 Microsoft SQL Server Management Studio 2014 中打开一个非常大的文件?
- php - 如何在服务器端解密来自 php web api 的加密密码?
- c# - rdp会话处于活动状态时如何隐藏最上面的窗口
- c# - 在 WFA 中使用 openFileDialog
- javascript - 向传单问题添加标记