Efficace itération avec index en Scala

Depuis Scala n'a pas old Java style for boucles avec index,

//does not work
val xs = Array("first", "second", "third")
for (i=0; i<xs.length; i++) {
  println("String #" + i + " is " + xs(i))
}

Comment peut-on parcourir efficacement, et sans l'aide de vars'?

Que vous pourriez faire ce

val xs = Array("first", "second", "third")
val indexed = xs zipWithIndex
for (x <- indexed) println("String #" + x._2 + " is " + x._1)

mais la liste est parcourue deux fois - n'est pas très efficace.

  • Ce sont toutes de bonnes réponses. Ce qui me manque de Java "pour" boucles est la possibilité d'avoir plusieurs initialiseurs, et la capacité à "itérer" en utilisant plus que juste incrémente/décrémente. C'est une instance où Java peut être plus concis que Scala.
  • ..."itérer" en utilisant plus que juste incrémente/décrémente... En scala, il est possible d'itérer avec l'étape, ou itérer avec des "si" condition dans la boucle d'en-tête. Ou vous cherchez quelque chose d'autre?
  • /*Java*/ for(int i=0, j=0; i+j<100; i+=j*2, j+=i+2) {...} Comment pouvez-vous faire cela en 1 ligne en Scala?
  • À mon avis, le plus naturel de la traduction à la Scala serait un while boucle. Je me souviens, il y avait un débat il y a quelques années si Scala doit hériter de Java for(;;) boucle, et il a été décidé que l'avantage n'était pas suffisant pour justifier la complexité ajoutée.
InformationsquelleAutor snappy | 2011-07-26