Нет чистого способа сделать это. Шермано прав.Это не приятно, но это лучший способ.Ваши варианты
a) Использование dropLast
или drop
Однако вы не можете использовать приведение типов для ArrayList
lis = lis.dropLast(1) as ArrayList<Int>
Это даетошибка во время выполнения.Нужно объявить переменную как MutableList
, это почти то же самое.
var lis = mutableListOf(2,3,4)
lis = lis.dropLast(2) as MutableList<Int>
println("dropLast: ${lis.size} ${lis[0]}")
Он печатает
dropLast: 1 2
Вы также можете использовать lis.dropLast(2).toMutableList()
b) Использовать for
оператор
var lis=arrayListOf(2,3,4)
for (i in lis.indices.reversed()) {
if (i>=1 && i<=2) lis.removeAt(i)
}
println("for: ${lis.size} ${lis[0]}")
Обратите внимание, что нужно удалить в обратном направлении.
Он печатает
for: 1 2
c) Использование subList
var lis = arrayListOf(2,3,4)
lis.subList(1,3).clear()
println("subList: ${lis.size} ${lis[0]}")
Он печатает
subList: 1 2
/ * /
Я предпочитаю третий вариант, заключенный в какую-то встроенную функцию.
inline fun <T> ArrayList<T>.delLen(ini:Int, len:Int=-1) {
if (len == -1)
this.subList(ini,this.size).clear()
else
this.subList(ini,ini+len).clear()
}
Итак
lis.delLen(0,2) // delete the 0th postion for 2 positions.
lis.dellen(1) // delete from 1st postion forward.
Мне также нравится
inline fun <T> ArrayList<T>.delLast(n:Int=1) {
this.subList(this.size-n,this.size).clear()
}
Примеры
lis.delLast() // delete the last position
list.delLast(3) // delete last 3 positions