Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin sortBy()选择器未对列表进行排序_Kotlin - Fatal编程技术网

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