web-dev-qa-db-fra.com

Remplacer l'élément dans la liste par scala

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)
46
Berlin Brown

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)
47
Vasil Remeniuk

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).

82
Rex Kerr

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.

8
Ken Bloom

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)
1
damon-lin

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.

1
nishant ambastha

Si vous effectuez beaucoup de ces remplacements, il est préférable d'utiliser une classe ou un tableau mutable.

0
v6ak

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)
0
prasshant