Kotlin:按多个属性对列表进行排序
Kotlin: Sort list by mutliple attributes
假设我有以下代码:
val list = mutableListOf("abab", "abcd", "aaa")
list.sortBy { it.length } //result: [aaa, abab, abcd]
这将按字符串的长度对列表进行排序。
我如何根据其他规则打破平局(2 个相同长度的字符串),比方说字符的出现次数 'a'。
这样,就会有比较规则的层次结构:首先是长度,然后按 'a' 的数量打破平局,然后可能是其他一些规则。
函数sortBy只接收一个选择器,它将元素映射到一个可比较的值,我认为这不能实现我想做的事情。
使用sortWith
和自定义比较器
val list = mutableListOf("abab", "abcd", "aaa")
list.sortWith(compareBy(String::length).thenBy { it.count { char -> char == 'a'} })
您可以在此处查看可帮助您创建新比较器的所有函数的文档:
kotlin.comparisons
假设我有以下代码:
val list = mutableListOf("abab", "abcd", "aaa")
list.sortBy { it.length } //result: [aaa, abab, abcd]
这将按字符串的长度对列表进行排序。
我如何根据其他规则打破平局(2 个相同长度的字符串),比方说字符的出现次数 'a'。 这样,就会有比较规则的层次结构:首先是长度,然后按 'a' 的数量打破平局,然后可能是其他一些规则。
函数sortBy只接收一个选择器,它将元素映射到一个可比较的值,我认为这不能实现我想做的事情。
使用sortWith
和自定义比较器
val list = mutableListOf("abab", "abcd", "aaa")
list.sortWith(compareBy(String::length).thenBy { it.count { char -> char == 'a'} })
您可以在此处查看可帮助您创建新比较器的所有函数的文档: kotlin.comparisons