2016-04-14 20 views
7

Voglio ottenere l'elemento ennesima di un Seq, qualcosa di simile:Come ottengo l'ennesimo elemento di un Seq?

val mySeq = Seq("A", "B", "C") 
mySeq.get(1) // Java syntax for List. This does not work. 
+0

Per riferimento futuro, è possibile trovare i documenti API per 'Seq' [qui] (http://www.scala-lang.org/api/current/#scala.collection.Seq). –

+0

Ah si. Ecco dove ho finito per trovare la risposta. –

risposta

7

mySeq.apply(1) è un altro modo per dire mySeq(1)

scala> val mySeq = Seq("A", "B", "C") 
mySeq: Seq[String] = List(A, B, C) 

scala> mySeq(0) 
res0: String = A 

scala> mySeq(1) 
res1: String = B 
+1

Si noti che la sintassi 'apply apply 'è la stessa della sintassi solitamente utilizzata per accedere all'elemento * nth * di un array in Scala. Questo ci dà una bella simmetria tra Sequenze e Array. Ad esempio, 'val mySum = mySeq (0) + myArray (0)' – DaoWen

1

Il metodo per ottenere l'elemento esimo di un Seqn è apply:

val mySeq = Seq("A", "B", "C") 
mySeq.apply(1) // "B" 

Di solito non hai mai scrivi x.apply(y) e usa semplicemente la stenografia x(y). Il compilatore Scala lo convertirà per te.

mySeq(1) // "B" 
13

Per evitare indice fuori limite,

scala> mySeq(200) 
java.lang.IndexOutOfBoundsException: 200 
    at scala.collection.LinearSeqOptimized$class.apply(LinearSeqOptimized.scala:65) 
    at scala.collection.immutable.List.apply(List.scala:84) 
    ... 33 elided 

ascensore sequenza,

mySeq.lift(2) 
Some(C) 

mySeq.lift(200) 
None 

o in un SI modo milar,

mySeq.drop(2).headOption 
Some(C) 

mySeq.drop(200).headOption 
None 

Sollevando la sequenza definiamo una funzione parziale da Int su ciascun valore della sequenza. Vale a dire da ciascun indice di posizione sul suo valore corrispondente. Quindi le posizioni non definite (nessun valore negativo o maggiore della dimensione della raccolta) vengono mappate su None, il resto viene definito e diventa il valore Some.

Problemi correlati