Set là collection của các phần tử không bị trùng lặp với kiểu giống nhau. Không giống như List, Set không chứa các phần tử bị trùng lặp. Set có thể là mutable hoặc immutable. Khi một object là immutable thì nó sẽ không thể bị thay đổi giá trị.
Mặc định Scala sử dụng immutable. Thêm vào scala.collection.mutable.Set
để sử dụng mutable Set một cách chính xác.
Hãy xem ví dụ sau đây
val country = Set("Russia", "Denmark", "Sweden")
Set của kiểu dữ liệu Interger có thể được tạo như sau
var id : Set[Int] = Set(4,5,6,7,8,9)
Một Set rỗng có thể được tạo như sau
var age = Set()
Hoạt động cơ bản trên Set
Các hoạt động cơ bản trên Set bao gồm
- head → Trả về phần tử đầu tiên của một Set
- tail → Trả về tất cả các phần tử trừ phần tử đầu tiên của Set
- isEmpty → trả về true nếu Set là trống, ngoài ra trả về false
Hãy xem ví dụ sau đây
object Student { def main(args: Array[String]) { val name = Set("Smith", "Brown", "Allen") val id: Set[Int] = Set() println( "Head of name : " + name.head ) println( "Tail of name : " + name.tail ) println( "Check if name is empty : " + name.isEmpty ) println( "Check if id is empty : " + id.isEmpty ) } }
Ở đây chúng ta đang tạo Student
object với 2 Set là name
và id
. Chúng ta gọi các phương thức head
, tail
và isEmpty
trên các Set này và in ra kết quả
Kết quả
Head of name : Smith Tail of name : Set(Brown, Allen) Check if name is empty : false Check if id is empty : true
Ghép nối các Set
Để nối một hoặc nhiều Set sử dụng toán tử ++
hoặc phương thức Set.++()
. Khi chúng ta thêm các Set vào thì những phần tử trùng nhau sẽ bị xoá đi.
Hãy xem ví dụ sau đây
object Furniture { def main(args: Array[String]) { val furniture_1 = Set("Sofa", "Table", "chair") val furniture_2 = Set("Bed", "Door") var furniture = furniture_1 ++ furniture_2 println( "furniture_1 ++ furniture_2 : " + furniture ) var furn = furniture_1.++(furniture_2) println( "furniture_1.++(furniture_2) : " + furn ) } }
Chúng ta đang tạo 2 Set là furniture_1 và furniture_2 và nối chúng thành furniture và furn sử dụng các toán tử ++
và Set.++
Kết quả
furniture_1 ++ furniture_2 : Set(Door, Sofa, Bed, Table, chair) furniture_1.++(furniture_2) : Set(Door, Sofa, Bed, Table, chair)
Giá trị chung trong các Set
Phương thức Set.&
hoặc Set.intersect
được dùng để tìm kiếm các giá trị giống nhau trong 2 hoặc nhiều Set
Xem ví dụ bên dưới đây
object Numbers { def main(args: Array[String]) { val n1 = Set(11,45,67,78,89,86,90) val n2 = Set(10,20,45,67,34,78,98,89) println( "n1.&(n2) : " + n1.&(n2) ) println( "n1.intersect(n2) : " + n1.intersect(n2) ) } }
Kết quả
n1.&(n2) : Set(78, 89, 45, 67) n1.intersect(n2) : Set(78, 89, 45, 67)
Phần tử lớn nhất và nhỏ nhất trong Set
Phương thức Set.min
dùng để tìm phần tử nhỏ nhất và phương thức Set.max
tìm phần tử lớn nhất trong các phần tử trong Set
Xem ví dụ sau đây
object Numbers { def main(args: Array[String]) { val num1 = Set(125,45,678,34,20,322,10) println( "Minimum element in the Set is : " + num1.min ) println( "Maximum element in the Set is : " + num1.max ) } }
Chúng ta đang tìm các số lớn nhất và nhỏ nhất trong Set num1
sử dụng phương thức min
và max
Minimum element in the Set is : 10 Maximum element in the Set is : 678
Các phương thức hữu ích
Một vài phương thức trong Set:
- def contains(elem: X): Boolean → Trả về True nếu phần tử được chứa trong Set, ngoài ra trả về false
- def last: X → Trả về phần tử cuối cùng
- def size: Int → Trả về số lượng các phần tử trong immutable Set
- def product: X → Trả về tíc các phần tử trong immutable Set sử dụng toán tử *
- def sum: X → Trả về tổng các phần tử trong immutable Set sử dụng toán tử +
- def toList: List[X] → Chuyển đổi Set sang List
- def toSeq: Seq[X] → Chuyển đổi Set sang Seq
- def toArray: Array[X] → Chuyển đổi Set sang Array
- def subsetOf(that: Set[X]): Boolean → Trả về true nếu Set này là tập con của that ví dụ tất cả phần tử của Set cũng là phần tử của that
- def mkString: String → Hiển thị tất cả các phần tử của Set trong một string.