为什么不能在.copyOf()之后链接.sort()?

时间:2019-06-08 23:11:40

标签: kotlin

我将保持非常简单。为什么起作用:

var heights = arrayOf(1,2,3,4,2,3,4)
var sortedHeights = heights.copyOf()
sortedHeights.sort()

for (i in 0..heights.size-1)
{
    println(sortedHeights[i])
}

但这不是吗?

var heights = arrayOf(1,2,3,4,2,3,4)
var sortedHeights = heights.copyOf().sort()

for (i in 0..heights.size-1)
{
    println(sortedHeights[i])
}

如您所见,唯一的区别是与sortedHeights数组的链接。如果copyOf()返回一个数组,我是否应该可以将它与sort()链接起来?

2 个答案:

答案 0 :(得分:3)

forpas回答了为什么您的代码在注释中不起作用,但是您仍然可以使用scope functions来允许链接:

var sortedHeights = heights.copyOf().apply { sort() }

var sortedHeights = heights.copyOf().also { it.sort() }

答案 1 :(得分:3)

有一个内置的函数既执行copyOf()又执行排序:sortedArray()

您可以将代码行更改为:

var sortedHeights = heights.sortedArray()

(但是除非您打算更改变量的值,否则您应该真正使用val而不是var