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.
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.
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
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
Phương pháp để có được những yếu tố thứ n của một Seq
là apply
:
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"
Để 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
.
Để 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). –
Ah vâng. Đó là nơi tôi đã tìm ra câu trả lời. –