kotlin: 排序: sortBy/sortedBy函数
一,功能
sortBy
- 就地排序:直接修改原列表,保持元素相对顺序(稳定性排序)。
- 参数:接收一个选择器函数(如
(T) -> R
),用于提取排序依据的属性。 - 示例:按字符串长度排序:
list.sortBy{it.length}
。 - sortByDescending(): 使用倒序
sortedBy
- 返回新列表:生成一个已排序的新列表,保持原列表不变。
- 参数:与
sortBy
相同,但返回的是排序后的副本。 - 示例:按首字母排序:
list.sortedBy{it.first()}
。 - sortedByDescending(): 使用倒序
二,例子:改变列表自身顺序
代码:
//处理按钮点击事件
binding.button1.setOnClickListener {
//在可变列表自身上排序
val origins2 = mutableListOf("aaa", "c", "bb")
println("未排序前:"+origins2)
origins2.sortBy { it.length }
println("排序后:"+origins2)
origins2.sortByDescending { it.length }
println("倒序排序后:"+origins2)
//按特定属性排序
val mapList = mutableListOf(1 to "A" , 2 to "B", 5 to "C", 3 to "D")
println("排序前:"+mapList)
mapList.sortBy { it.first }
println("按first排序后:"+mapList) // [(1, A), (2, B), (3, D), (5, C)]
mapList.sortBy { it.second }
println("按second排序后:"+mapList) // [(1, A), (2, B), (5, C), (3, D)]
}
运行结果:
三,例子:返回新列表
代码:
//处理按钮点击事件
binding.button2.setOnClickListener {
val origins = listOf("aaa", "c", "bb")
//按长度排序
println("按长度排序后:"+origins.sortedBy { it.length }) //[c, bb, aaa]
println("按长度倒排后:"+origins.sortedByDescending { it.length }) //[aaa, bb, c]
//按特定属性排序
val mapList = listOf(1 to "A" , 2 to "B", 5 to "C", 3 to "D")
println("排序前:"+mapList)
println("按first排序后:"+mapList.sortedBy { it.first }) // [(1, A), (2, B), (3, D), (5, C)]
println("按second排序后:"+mapList.sortedBy { it.second }) // [(1, A), (2, B), (5, C), (3, D)]
}
运行结果: