2016-04-14 60 views
7

我希望得到一個Seq的第n個元素,像這樣:如何獲得Seq的第n個元素?

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

爲了將來的參考,你可以找到'Seq' [這裏](http://www.scala-lang.org/api/current/#scala.collection.Seq)的API文檔。 –

+0

啊是的。那就是我最終找到答案的地方。 –

回答

7

mySeq.apply(1)是另一種說法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

請注意,'apply'語法的縮寫與通常用於訪問Scala中數組* nnth *元素的語法相同。這給了我們序列和數組之間的一個很好的對稱性。例如'val mySum = mySeq(0)+ myArray(0)' – DaoWen

1

獲得Seqñ個元素的方法是apply

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

通常你永遠寫x.apply(y),只需使用簡寫x(y)。 Scala編譯器會爲你轉換它。

mySeq(1) // "B" 
13

爲了避免索引越界,

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 

電梯的順序,

mySeq.lift(2) 
Some(C) 

mySeq.lift(200) 
None 

或在SI milar方式,

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

mySeq.drop(200).headOption 
None 

通過擡起序列我們定義從Int部分功能到序列的每個值。即從每個位置索引到其對應的值。因此未定義的位置(任何負值或大於集合的大小)被映射到None,其餘的被定義並且變成Some值。