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())
}