使用 sortedBy(...) 排序在 kotlin 中不起作用
Posted
技术标签:
【中文标题】使用 sortedBy(...) 排序在 kotlin 中不起作用【英文标题】:Sorting not working in kotlin by using sortedBy(...) 【发布时间】:2020-11-01 05:13:54 【问题描述】:我正在尝试使用 val list = categoryList.sortedBy it
对此进行排序:listOf("P5","P1","P2","P3","P10")
,但返回的是:[P1, P10, P2, P3, P5]
,根据我的要求,它应该返回 [P1, P2, P3, P5, P10]
,所以我在这里做错了什么?
【问题讨论】:
你的数组总是 ("P5","P1","P2","P3","P10") ? 【参考方案1】:由于您直接按字符串值排序,因此您将得到该结果。相反,您可以按以下字符串的整数部分排序:
categoryList.sortedBy it.substring(1).toInt()
【讨论】:
【参考方案2】:您正在排序 String
列表而不是 Integer
列表。这就是P10
排在P2
前面的原因。所以,请尝试以下方法进行排序:
var list: List<String> = mutableListOf("P5","P1","P2","P3","P10")
.sortedWith(compareBy( it.length , it ))
【讨论】:
你能告诉我这是如何工作的吗?我无法理解这种表达方式。 @sak 这里的 compareBy 带有 2 个比较器,字符串长度 it.length
和字符串值 it
。这样可以确保 P10 不会紧挨着 P1。【参考方案3】:
您正在排序字符串,而不是数字,因此 Kotlin 正在按字典顺序对它们进行排序。这就是为什么“P10”被评估为小于“P2”的原因。
【讨论】:
以上是关于使用 sortedBy(...) 排序在 kotlin 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章