2016-04-14 13 views
7

Chcę uzyskać n-ty element jest Seq, coś takiego:Jak uzyskać n-ty element Seq?

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

W celu późniejszego wykorzystania można znaleźć dokumenty API dla 'Seq' [tutaj] (http://www.scala-lang.org/api/current/#scala.collection.Seq). –

+0

Ah tak. Tam właśnie znalazłem odpowiedź. –

Odpowiedz

7

mySeq.apply(1) to kolejny sposób powiedzieć 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

Należy zauważyć, że skrócona składnia 'apply' jest taka sama, jak składnia używana zwykle do dostępu do * nth * elementu tablicy w Scali. To daje nam ładną symetrię pomiędzy Sekwencjami i Tablicami. Np. 'Val mySum = mySeq (0) + myArray (0)' – DaoWen

1

metoda, aby uzyskać n th element w Seq jest apply:

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

Zazwyczaj nigdy napisz x.apply(y) i użyj skrótu x(y). Kompilator Scala przekonwertuje go dla Ciebie.

mySeq(1) // "B" 
13

Aby uniknąć indeks poza granicami,

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 

wyciąg sekwencja,

mySeq.lift(2) 
Some(C) 

mySeq.lift(200) 
None 

lub w Si Milar sposób

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

mySeq.drop(200).headOption 
None 

podnosząc sekwencję zdefiniować częściowy funkcję z Int na każdej wartości sekwencji. Mianowicie z każdego indeksu pozycji na odpowiadającą mu wartość. W związku z tym pozycje nieokreślone (każda wartość ujemna lub większa niż rozmiar kolekcji) są mapowane na None, pozostałe są zdefiniowane i stają się wartością Some.

Powiązane problemy