Je fais un exercice qui demande à éliminer les éléments à des positions impaires.
Je me demande s'il y a une meilleure alternative à ce que je pensais: p> le Première approche: p> et la seconde: p> suis-je correct si je pense que la deuxième approche est plus efficace? Comme il n'est pas nécessaire de produire une liste intermédiaire comme zipwithinex code> fait? P> p>
3 Réponses :
Vous pouvez éviter la formation de la collection intermédiaire à l'aide de avecfilter code>, vous pouvez également convertir la liste en mode Vecteur pour extraire l'élément à des indices particuliers en temps constant: val a: Vector[Int] = List(1,2,3,4,5,6).toVector
val res: Seq[Int] = a.indices.withFilter(i => (i & 1) == 1).map(a(_))
println(res)
Conversion de la liste en un Vecteur code> n'est pas effectué en temps constant.
Mais l'accès à l'élément sera en temps constant
A.Indices code> est exécuté en temps constant (la définition est juste 0 jusqu'à la longueur code>). Tandis que a.tovector.indices code> fonctionnera en temps linéaire, car il doit copier tous les éléments dans un nouveau vecteur code> code>. Il n'y a pas de point de convertir la liste code> code> vers un vecteur code>.
Vous pouvez utiliser la méthode https://scalafiddle.io/sf/ybureix/0 p> Je ne suis pas sûr de l'efficacité, bien que p> < / p> collecter code> sur la liste zippée, peut-être un peu plus précise
Vous pouvez utiliser une vue pour éviter les listes intermédiaires: Ceci ne traversera que A code> une fois lorsque force code> est appelé. < / p> p>
Je suggérerais le contraire. Indexer une liste
code>, i.e.a (_) code> est une opération linéaire inefficace pour les listes longues. À éviter.