Удаление элемента из MutableList в Scala
у меня есть MutableList
и я хочу удалить из него элемент, но я не могу найти соответствующий метод. Существует метод удаления элемента из ListBuffer
такой:
val x = ListBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)
x -= 5
Я не могу найти эквивалент метод MutableList
.
2 ответов
MutableList
не хватает -=
и --=
потому что он не расширяет Shrinkable
черта. Различные мотивации для этого можно найти здесь.
MutableList
есть diff
, filter
и другие методы, которые могут помочь вам в случае, если вы находитесь в ситуации, когда переназначение переменной (или создание экземпляра новой переменной) может быть опцией, а проблемы производительности не имеют первостепенного значения:
var mylist = MutableList(1, 2, 3)
mylist = mylist diff Seq(1)
val myNewList = mylist.filter(_ != 2)
val indexFiltered = mylist.zipWithIndex.collect { case (el, ind) if ind != 1 => el }
вы можете часто использовать ListBuffer
вместо MutableList
, который откроет нужные -=
и --=
методы:
val mylist = ListBuffer(1, 2, 3)
mylist -= 1 //mylist is now ListBuffer(2, 3)
mylist --= Seq(2, 3) //mylist is now empty
Это не ответ, просто, чтобы предупредить вас о проблемах (по крайней мере в 2.11.x):
//street magic
scala> val a = mutable.MutableList(1,2,3)
a: scala.collection.mutable.MutableList[Int] = MutableList(1, 2, 3)
scala> a += 4
res7: a.type = MutableList(1, 2, 3, 4)
scala> a
res8: scala.collection.mutable.MutableList[Int] = MutableList(1, 2, 3, 4)
scala> a ++= List(8,9,10)
res9: a.type = MutableList(1, 2, 3, 4, 8, 9, 10)
scala> val b = a.tail
b: scala.collection.mutable.MutableList[Int] = MutableList(2, 3, 4, 8, 9, 10)
scala> b.length
res10: Int = 6
scala> a.length
res11: Int = 7
scala> a ++= List(8,9,10)
res12: a.type = MutableList(1, 2, 3, 4, 8, 9, 10, 8, 9, 10)
scala> b += 7
res13: b.type = MutableList(2, 3, 4, 8, 9, 10, 7)
scala> a
res14: scala.collection.mutable.MutableList[Int] = MutableList(1, 2, 3, 4, 8, 9, 10, 7)
scala> b
res15: scala.collection.mutable.MutableList[Int] = MutableList(2, 3, 4, 8, 9, 10, 7)
scala> a ++= List(8,9,10)
res16: a.type = MutableList(1, 2, 3, 4, 8, 9, 10, 7)
этот пример взят из некоторого gist-я опубликовал его на facebook с тегами #devid_blein #street_magic, но не могу найти оригинальную ссылку в интернете.