Bộ sưu tập Scala - Tuple

Scala tuple kết hợp một số lượng cố định các mục lại với nhau để chúng có thể được chuyển đi khắp nơi. Không giống như một mảng hoặc danh sách, một bộ tuple có thể chứa các đối tượng với nhiều kiểu khác nhau nhưng chúng cũng không thay đổi được.

Sau đây là một ví dụ về một bộ giá trị chứa một số nguyên, một chuỗi và bảng điều khiển.

val t = (1, "hello", Console)

Đó là đường cú pháp (viết tắt) cho những điều sau:

val t = new Tuple3(1, "hello", Console)

Loại thực tế của một tuple phụ thuộc vào số lượng và các phần tử mà nó chứa cũng như kiểu của các phần tử đó. Do đó, kiểu của (99, "Luftballons") là Tuple2 [Int, String]. Loại ('u', 'r', "the", 1, 4, "me") là Tuple6 [Char, Char, String, Int, Int, String]

Tuple thuộc loại Tuple1, Tuple2, Tuple3, v.v. Hiện tại có giới hạn trên là 22 trong Scala nếu bạn cần thêm, thì bạn có thể sử dụng một bộ sưu tập, không phải một bộ. Đối với mỗi kiểu TupleN, trong đó 1 <= N <= 22, Scala xác định một số phương thức truy cập phần tử. Cho định nghĩa sau:

val t = (4,3,2,1)

Để truy cập các phần tử của bộ tuple t, bạn có thể sử dụng phương pháp t._1 để truy cập phần tử đầu tiên, t._2 để truy cập phần tử thứ hai, v.v. Ví dụ, biểu thức sau đây tính tổng tất cả các phần tử của t.

val sum = t._1 + t._2 + t._3 + t._4

Bạn có thể sử dụng Tuple để viết một phương thức lấy Danh sách [Double] và trả về số đếm, tổng và tổng bình phương được trả về trong Tuple ba phần tử, Tuple3 [Int, Double, Double]. Chúng cũng hữu ích để chuyển một danh sách các giá trị dữ liệu dưới dạng thông điệp giữa các tác nhân trong lập trình đồng thời.

Hãy thử chương trình ví dụ sau. Nó chỉ ra cách sử dụng một tuple.

Thí dụ

object Demo {
   def main(args: Array[String]) {
      val t = (4,3,2,1)
      val sum = t._1 + t._2 + t._3 + t._4
      println( "Sum of elements: "  + sum )
   }
}

Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.

Lệnh

\>scalac Demo.scala
\>scala Demo

Đầu ra

Sum of elements: 10

Lặp lại trên Tuple

Bạn có thể dùng Tuple.productIterator() phương pháp lặp qua tất cả các phần tử của Tuple.

Hãy thử chương trình ví dụ sau để lặp qua các bộ giá trị.

Thí dụ

object Demo {
   def main(args: Array[String]) {
      val t = (4,3,2,1)
      t.productIterator.foreach{ i =>println("Value = " + i )}
   }
}

Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.

Lệnh

\>scalac Demo.scala
\>scala Demo

Đầu ra

Value = 4
Value = 3
Value = 2
Value = 1

Chuyển đổi sang chuỗi

Bạn có thể dùng Tuple.toString()để nối tất cả các phần tử của bộ tuple thành một chuỗi. Hãy thử chương trình ví dụ sau để chuyển đổi thành Chuỗi.

Thí dụ

object Demo {
   def main(args: Array[String]) {
      val t = new Tuple3(1, "hello", Console)
      println("Concatenated String: " + t.toString() )
   }
}

Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.

Chỉ huy

\>scalac Demo.scala
\>scala Demo

Đầu ra

Concatenated String: (1,hello,scala.Console$@281acd47)

Hoán đổi các phần tử

Bạn có thể dùng Tuple.swap phương thức hoán đổi các phần tử của Tuple2.

Hãy thử chương trình ví dụ sau để hoán đổi các phần tử.

Thí dụ

object Demo {
   def main(args: Array[String]) {
      val t = new Tuple2("Scala", "hello")
      println("Swapped Tuple: " + t.swap )
   }
}

Lưu chương trình trên vào Demo.scala. Các lệnh sau được sử dụng để biên dịch và thực thi chương trình này.

Chỉ huy

\>scalac Demo.scala
\>scala Demo

Đầu ra

Swapped tuple: (hello,Scala)