Почему я не могу связать .sort () после .copyOf ()? - PullRequest
0 голосов
/ 09 июня 2019

Я сделаю это очень просто.Почему это работает:

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 ]

3 голосов
/ 09 июня 2019

Существует встроенная функция, выполняющая как copyOf(), так и сортировку: sortedArray()

. Вы можете изменить строку кода на:

var sortedHeights = heights.sortedArray()

(но вы должны действительноиспользовать val вместо var, если вы не собираетесь изменять значение переменной)

3 голосов
/ 09 июня 2019

forpas ответили, почему ваш код не работает в комментариях, но вы можете использовать функции области видимости , чтобы разрешить цепочку в любом случае:

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

или

var sortedHeights = heights.copyOf().also { it.sort() }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...