Frage

Ist es möglich, einen automatischen Zähler für Verständnisse in Scala zu verwenden?

etwas wie

for (element <- elements; val counter = counter+1) yield NewElement(element, counter)
War es hilfreich?

Lösung

Ich glaube, dass Sie suchen zipWithIndex Methode verfügbar auf Aufführen und andere Sammlungen. Hier ist ein kleines Beispiel für die Verwendung:

scala> val list = List("a", "b", "c")
list: List[java.lang.String] = List(a, b, c)

scala> list.zipWithIndex
res0: List[(java.lang.String, Int)] = List((a,0), (b,1), (c,2))

scala> list.zipWithIndex.map{case (elem, idx) => elem + " with index " + idx}
res1: List[java.lang.String] = List(a with index 0, b with index 1, c with index 2)

scala> for ((elem, idx) <- list.zipWithIndex) yield elem + " with index " + idx
res2: List[java.lang.String] = List(a with index 0, b with index 1, c with index 2)

Andere Tipps

A für das Verständnis ist nicht wie eine für Schleife, da die Begriffe für jeden vorherigen Term bewertet werden. Schauen Sie sich beispielsweise die Ergebnisse unten an. Ich glaube nicht, dass Sie das suchen:

    scala> val elements = List("a", "b", "c", "d")
elements: List[java.lang.String] = List(a, b, c, d)

scala> for (e <- elements; i <- 0 until elements.length) yield (e, i)
res2: List[(java.lang.String, Int)] = List((a,0), (a,1), (a,2), (a,3), (b,0), (b,1), (b,2), (b,3), (c,0), (c,1), (c,2), (c,3), (d,0), (d,1), (d,2), (d,3))

Tenshis Antwort ist wahrscheinlich mehr auf dem Laufenden mit Ihrem gewünschten Ergebnis, aber ich hoffe, dass dieses Gegenbeispiel nützlich ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top