2016-04-14 14 views
7

Tôi muốn để có được những yếu tố thứ n của một Seq, một cái gì đó như thế này:Làm cách nào để lấy phần tử thứ n của Seq?

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

Để tham khảo trong tương lai, bạn có thể tìm thấy tài liệu API cho 'Seq' [ở đây] (http://www.scala-lang.org/api/current/#scala.collection.Seq). –

+0

Ah vâng. Đó là nơi tôi đã tìm ra câu trả lời. –

Trả lời

7

mySeq.apply(1) là một cách khác để nói 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

Lưu ý rằng cú pháp 'áp dụng' viết tắt giống như cú pháp thường được sử dụng để truy cập phần tử * nnth * của một mảng trong Scala. Điều này cho chúng ta một sự đối xứng tốt đẹp giữa Sequences và mảng. Ví dụ: 'val mySum = mySeq (0) + myArray (0)' – DaoWen

1

Phương pháp để có được những yếu tố thứ n của một Seqapply:

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

Thông thường, bạn không bao giờ viết x.apply(y) và chỉ sử dụng viết tắt x(y). Trình biên dịch Scala sẽ chuyển đổi nó cho bạn.

mySeq(1) // "B" 
13

Để tránh chỉ số nằm ngoài giới hạn,

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 

nâng chuỗi,

mySeq.lift(2) 
Some(C) 

mySeq.lift(200) 
None 

hoặc trong một si milar way,

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

mySeq.drop(200).headOption 
None 

Bằng cách nâng trình tự, chúng tôi xác định một phần chức năng từ Int lên mỗi giá trị của chuỗi. Cụ thể là từ mỗi chỉ mục vị trí lên giá trị tương ứng của nó. Do đó các vị trí không được xác định (bất kỳ giá trị âm hoặc lớn hơn kích thước của bộ sưu tập) được ánh xạ lên None, phần còn lại được xác định và trở thành giá trị Some.

Các vấn đề liên quan