Kotlin sortBy()选择器未对列表进行排序
我有一个Kotlin sortBy()选择器未对列表进行排序,kotlin,Kotlin,我有一个sortedBy{}语句,它打算根据字符串的长度对列表进行排序: var animals: List<String> = listOf("tiger", "cat", "dragon", "elephant") fun strLength(it: String) = it.length animals.sortedBy { strLength(it) } animals.forEach {println(it)} var动物:List=listOf(“老虎”、“猫”、“龙”
sortedBy{}
语句,它打算根据字符串的长度对列表进行排序
:
var animals: List<String> = listOf("tiger", "cat", "dragon", "elephant")
fun strLength(it: String) = it.length
animals.sortedBy { strLength(it) }
animals.forEach {println(it)}
var动物:List=listOf(“老虎”、“猫”、“龙”、“大象”)
fun strLength(it:String)=it.length
动物。通过{strLength(it)}分类
animals.forEach{println(it)}
但是,它只打印初始订单。知道为什么吗?您必须分配的输出,通过进行排序
animals = animals.sortedBy { strLength(it) }
因为,与Kotlin中的许多其他函数一样,sortedBy
不会改变输入&荣誉不变性。因此它返回一个新集合。因此,它减轻了副作用。科特林鼓励这种不变的方法。但是,如果需要,这些集合会有可变的对应项。sortedBy
不会对列表进行排序,而是返回一个新列表,该列表对元素进行了排序。如果您不需要新列表,只需使用sortBy
谢谢。您如何判断函数是否没有改变输入?例如,animals.sortedSceneding()
将改变集合(我不必编写animals=animals.sortedSceneding()
)有一个命名约定:collection.sort()
对集合进行排序并返回单元
,而collection.sorted()
返回已排序的副本。它是排序
与排序
的对比。但更强的指标是回报类型。如果它是单元
,它只能在适当的位置执行某些操作,否则它可能会返回一份副本。如果所有其他操作都失败,您可以随时阅读文档。。。()您的列表必须是可变的。使用mutableListOf
而不是listOf
。