1.2 Ngôn ngữ lập trình Swift
1.2.10 Tập hợp trong Swift
Cũng giống một số ngơn ngữ lập trình khác, tập hợp (Set) trong Swift được dùng để lưu trữ các giá trị khác nhau của cùng một kiểu dữ liệu, nhưng khác với mảng, các phần tử của tập hợp thì khơng có thứ tự (Mảng thì mỗi phần tử ln có thứ tự index nhất định). Do vậy, sử dụng tập hợp thay cho mảng trong những trường hợp mà thứ tự các phần tử trong đó khơng quan trọng và các giá trị của chúng khác biệt nhau (khơng muốn có
những giá trị bị trùng lặp trong đó).
Khai báo tập hợp (Set)
var setName = Set<Kieu>() // Khai báo một tập hợp rỗng kiểu Kieu hoặc
var setName: Set = [value1, value2, …] // Khai báo và khởi gán giá trị cho tập hợp hoặc var setName: Set<Kieu> = [value1, value2, …] // Khai báo và khởi gán với kiểu Kieu.
Một số phép xử lý thường thực hiện trên cấu trúc kiểu tập hợp
Ví dụ với khai báo sau ta có thể thực hiện:
var setInt = Set<Int>()
STT Phép tốn Mơ tả
1 setInt.isEmpty Kiểm tra tập hợp có rỗng khơng (Trường hợp này kết
quả là true)
2 setInt.insert(10) Đưa một phần tử vào trong tập hợp (Với tập hợp số
nguyên setInt ở trên thì phần tử 10 được thêm vào). Kết quả phép thêm vào sẽ trả về bộ (inserted,
24
memberAfterInsert), trong đó inserted. Nếu phép thêm vào thành cơng thì inserted sẽ là true, ngược lại sẽ nhận giá trị false, còn memberAfterInsert sẽ chứa
các phần tử của tập hợp sau phép thêm. 3 setInt.count Trả về số các phần tử trong tập hợp
4 setInt.remove(10) Xố phần tử có giá trị 10 trong tập hợp setInt. Nếu tập hợp có chứa giá trị đó, phần tử sẽ bị xố và phép xố trả về chính phần tử đó. Ngược lại khơng phần tử nào bị xố và nó trả về nil.
5 setInt.contains(10) Kiểm tra sự tồn tại của phần tử trong tập hợp, nếu có trả về true, ngược lại trả về false.
6 for item in setInt
{…} Duyệt tập hợp sử dụng for-in. Lưu ý, trong cách duyệt này thì các phần tử được duyệt sẽ không theo một thứ tự nhất định nào.
7 for item in
setInt.sorted() {…} Duyệt tập hợp theo thứ tự được sắp xếp. 8 .union
.intersection .subtracting
Phép union sẽ trả về một tập hợp mới là kết quả của phép hợp giữa hai tập hợp. Phép intersection sẽ trả về một tập hợp mới là kết quả của phép giao giữa hai tập hợp. Còn phép subtracting sẽ trả về một tập hợp mới là kết quả của phép loại trừ các phần tử của tập hợp số 2 ra khỏi tập hợp số 1.
Một số ví dụ về tập hợp
Ví dụ 1: Thực hiện các phép union, intersection và subtracting
import UIKit
let setOdds: Set = [1,3,5,7,9] // Tập hợp số lẻ => { 3, 5, 7, 1, 9 } let setEvens: Set = [2,4,6,8] // Tập hợp số chẵn => { 6, 4, 2, 8} let primes: Set = [2,3,5,7] // Tập hợp số nguyên tố => { 2, 7, 3, 5 }
setOdds.union(setEvens) // { 7, 8, 9, 6, 2, 3, 1, 4, 5} setOdds.intersection(setEvens) // => {} Rỗng setOdds.intersection(primes) // => { 3, 7, 5} setOdds.subtracting(primes) // => { 9, 1}
setOdds.union(setEvens).subtracting(primes) // => { 4, 6, 9, 8, 1}
Ví dụ 2: Phát sinh n số ngẫu nhiên khác nhau cho một ứng dụng iOS.
import UIKit
// Tạo tập hợp rỗng kiểu Int
var setRandom = Set<Int>()
// Thực hiện vòng lặp đến khi đủ 100 số ngẫu nhiên
while setRandom.count < 100 {
// Phát sinh số ngẫu nhiên trong khoảng [1,1000] let numRandom = Int.random(in: 1...1000)
// Đảm bảo số ngẫu nhiên sẽ không bị lặp lại if setRandom.insert(numRandom).inserted { // Sử dụng số ngẫu nhiên vừa tạo
print("So ngau nhien hop le tiep theo \(numRandom)") }