sortedBy() 选择器未对列表进行排序

Zor*_*gan 2 kotlin

我有一个sortedBy{}声明打算List按元素的长度对a 进行排序String

var animals: List<String> = listOf("tiger", "cat", "dragon", "elephant")
fun strLength(it: String) = it.length
animals.sortedBy { strLength(it) }
animals.forEach {println(it)}
Run Code Online (Sandbox Code Playgroud)

但是它只打印初始订单。知道为什么吗?

Lak*_*gha 5

您必须分配 的输出sortedBy

\n\n
  animals = animals.sortedBy { strLength(it) }\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为,与 Kotlin 中的许多其他函数一样,sortedBy\xe2\x80\x99 不会改变输入并遵守不变性。所以它返回一个新的集合。因此它可以减轻副作用。Kotlin 鼓励这种不可变的方法。但是,如果需要,这些集合还有可变的对应项。

\n

  • 有一个命名约定:“collection.sort()”对集合进行就地排序并返回“Unit”,而“collection.sorted()”则返回排序后的副本。这是“排序”与“排序”。但更强有力的指标是返回类型。如果它是“Unit”,它只能就地执行某些操作,否则它可能会返回一个副本。 (2认同)