No set method providing array access

Пытаюсь отсортировать элементы List по критерию "age" методом пузырька в extension функции, но при перестановке элементов местами Idea ругается "No set method providing array access" подскажите в чем может быть дело? Как решить эту задачу ? Ответов пока не нашёл. Спасибо

data class Person(val name: String, val surname: String, val age: Int) {
    operator fun compareTo(person: Person): Int {
        return this.age - person.age
    }
}

class Main {

}

fun List<Person>.sort():List<Person> {
    var swap = true
    var cur: Person
    var next: Person
    var tmp: Person
    while(swap) {
        swap = false
        for (i in 0 until size - 2) {
            if (this[i] > this[i+1]) {
                tmp = this[i]
                this[i] = this[i+1] //ошибка No set method providing array access
                this[i+1] = tmp; // ошибка No set method providing array access
                swap = true
            }
        }
    }
    return this
}

fun main (args: Array<String>) {
    val test = Person("Andrey", "Mironov", 23)
    val test1 = Person("Tony", "Stark", 25)
    val test2 = Person("Vito", "Scaletta", 27)
    val collection = listOf(test1,test,test2);
    print(collection.sort())

}

Ответы (1 шт):

Автор решения: Никита Филиппов

Я нашёл ответ на вопрос! List по умолчанию является неизменяемым(его нельзя отсортировать), в нем нет интерфейсов для его изменения. Поэтому надо использовать MutableList.

Исправленный код:

data class Person(val name: String, val surname: String, val age: Int) {
    operator fun compareTo(person: Person): Int {
        return this.age - person.age
    }
}

class Main {

}

fun MutableList<Person>.sort():MutableList<Person> {
    var swap = true
    var tmp: Person
    while(swap) {
        swap = false
        for (i in 0 until size - 2) {
            if (this[i] > this[i+1]) {
                tmp = this[i]
                this[i] = this[i+1]
                this[i+1] = tmp;
                swap = true
            }
        }
    }
    return this
}

fun main (args: Array<String>) {
    val test = Person("Andrey", "Mironov", 23)
    val test1 = Person("Tony", "Stark", 25)
    val test2 = Person("Vito", "Scaletta", 27)
    val collection = mutableListOf(test1,test,test2);
    print(collection.sort())
}
→ Ссылка