Comment remplacez-vous un élément par index par une liste immuable.
Par exemple.
val list = 1 :: 2 ::3 :: 4 :: List()
list.replace(2, 5)
En plus de ce qui a été dit précédemment, vous pouvez utiliser la fonction patch
qui remplace les sous-séquences d'une séquence:
scala> val list = List(1, 2, 3, 4)
list: List[Int] = List(1, 2, 3, 4)
scala> list.patch(2, Seq(5), 1) // replaces one element of the initial sequence
res0: List[Int] = List(1, 2, 5, 4)
scala> list.patch(2, Seq(5), 2) // replaces two elements of the initial sequence
res1: List[Int] = List(1, 2, 5)
scala> list.patch(2, Seq(5), 0) // adds a new element
res2: List[Int] = List(1, 2, 5, 3, 4)
Si vous voulez remplacer l'index 2, alors
list.updated(2,5) // Gives 1 :: 2 :: 5 :: 4 :: Nil
Si vous voulez trouver tous les endroits où il y a un 2 et mettre un 5 à la place,
list.map { case 2 => 5; case x => x } // 1 :: 5 :: 3 :: 4 :: Nil
Dans les deux cas, vous ne remplacez pas vraiment, vous retournez une nouvelle liste comportant un ou plusieurs éléments différents à cette (ces) position (s).
Vous pouvez utiliser list.updated(2,5)
(qui est une méthode sur Seq
).
Il est probablement préférable d’utiliser un scala.collection.immutable.Vector
à cette fin, car les mises à jour de Vector
prennent (je pense) un temps constant.
Vous pouvez utiliser map pour générer une nouvelle liste, comme ceci:
@ list
res20: List[Int] = List(1, 2, 3, 4, 4, 5, 4)
@ list.map(e => if(e==4) 0 else e)
res21: List[Int] = List(1, 2, 3, 0, 0, 5, 0)
Il peut également être réalisé en utilisant la fonction de patch en tant que
scala> var l = List(11,20,24,31,35)
l: List[Int] = List(11, 20, 24, 31, 35)
scala> l.patch(2,List(27),1)
res35: List[Int] = List(11, 20, 27, 31, 35)
où 2 est la position où nous cherchons à ajouter la valeur, List(27)
est la valeur que nous ajoutons à la liste et 1 le nombre d'éléments à remplacer de la liste d'origine.
Si vous effectuez beaucoup de ces remplacements, il est préférable d'utiliser une classe ou un tableau mutable.
voici un exemple simple de remplacement de chaîne dans Scala List. Vous pouvez faire de même pour d’autres types de données.
scala> val original: List[String] = List("a","b")
original: List[String] = List(a, b)
scala> val replace = original.map(x => if(x.equals("a")) "c" else x)
replace: List[String] = List(c, b)