我想获得a的第n个元素Seq,如下所示:
val mySeq = Seq("A", "B", "C")
mySeq.get(1) // Java syntax for List. This does not work.
Run Code Online (Sandbox Code Playgroud)
elm*_*elm 21
为了避免索引超出范围,
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
Run Code Online (Sandbox Code Playgroud)
解除序列,
mySeq.lift(2)
Some(C)
mySeq.lift(200)
None
Run Code Online (Sandbox Code Playgroud)
或以类似的方式,
mySeq.drop(2).headOption
Some(C)
mySeq.drop(200).headOption
None
Run Code Online (Sandbox Code Playgroud)
通过提升序列,我们从Int序列的每个值定义部分函数.即从每个位置索引到其对应的值.因此,未定义的位置(任何负值或大于集合的大小)被映射到None,其余的被定义并变为Some值.
Bri*_*ian 17
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
Run Code Online (Sandbox Code Playgroud)
获取a的第n个元素的方法Seq是apply:
val mySeq = Seq("A", "B", "C")
mySeq.apply(1) // "B"
Run Code Online (Sandbox Code Playgroud)
通常,你永远不会写x.apply(y),而只是使用速记x(y)。Scala 编译器将为您转换它。
mySeq(1) // "B"
Run Code Online (Sandbox Code Playgroud)
为了避免潜在的索引越界,您可以使用Try.
Try(mySeq(x)).toOption
Run Code Online (Sandbox Code Playgroud)
None当x>= 3 和< 3Some(...)时返回x。