2011-02-08 18 views
7

Nel codice seguente, all'interno del for comprensione, posso fare riferimento alla stringa e l'indice utilizzando un dereference tupla:Scala per-la comprensione della sintassi

val strings = List("a", "b", "c") 
for (stringWithIndex <- strings.zipWithIndex) { 
    // Do something with stringWithIndex._1 (string) and stringWithIndex._2 (index) 
} 

C'è un modo nella sintassi Scala di avere la stringWithIndex diviso nelle parti (stringa e indice) all'interno dell'intestazione for di comprensione, in modo che i lettori del codice non debbano meravigliarsi dei valori di stringWithIndex._1 e stringWithIndex._2?

Ho provato quanto segue, ma non sarebbe la compilazione:

for (case (string, index) <- strings.zipWithIndex) { 
    // Do something with string and index 
} 

risposta

21

È quasi fatta:

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

scala> for ((string, index) <- strings.zipWithIndex) 
     | { println("str: "+string + " idx: "+index) } 
str: a idx: 0 
str: b idx: 1 
str: c idx: 2 

Sede, senza bisogno di case parola chiave.

+1

Doh! Avrei dovuto provarlo :-). – Ralph

7
strings.zipWithIndex.foreach{case(x,y) => println(x,y)} 

res:

(a,0) 
(b,1) 
(c,2) 
+0

Non proprio quello di cui avevo bisogno, ma una bella riscrittura, niente-meno. – Ralph

+2

Anche se per quell'output, un singolo 'foreach (println)' sarebbe già stato abbastanza ... – Debilski

Problemi correlati