Menu
CoddyTech

Tập con và tập hợp con

Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 21 trên 56.

Ngoài việc kết hợp các tập hợp, bạn cũng có thể so sánh chúng.

isSubset(of:) trả lời câu hỏi “mọi phần tử của tập hợp của mình có nằm trong tập hợp kia không?”

let small: Set = [1, 2]
let big:   Set = [1, 2, 3, 4]
small.isSubset(of: big)            // true
big.isSubset(of: small)            // false

isSuperset(of:) là chiều ngược lại: “tập hợp này có chứa mọi phần tử của tập hợp kia không?”

big.isSuperset(of: small)          // true

isDisjoint(with:) trả về true khi hai tập hợp hoàn toàn không có phần tử chung:

let evens: Set = [2, 4, 6]
let odds:  Set = [1, 3, 5]
evens.isDisjoint(with: odds)       // true

Ba vị từ này là cách rõ ràng nhất để diễn đạt các quy tắc “quyền cần có” hoặc “phải có tất cả” / “không được có mục nào” mà không cần viết vòng lặp thủ công.

challenge icon

Thử thách

Trung bình

Bạn đang kiểm tra quyền truy cập vào một tài liệu. Hãy đọc ba dòng:

  1. Quyền của người dùng (phân tách bằng dấu phẩy)
  2. Quyền bắt buộc (phân tách bằng dấu phẩy)
  3. Quyền bị cấm (phân tách bằng dấu phẩy)

Người dùng được cấp quyền truy cập khi:

  • Quyền của họ là tập hợp cha của các quyền bắt buộc (họ có mọi quyền bắt buộc)
  • Quyền của họ không giao nhau với các quyền bị cấm

In chính xác một trong các giá trị sau:

  • granted
  • missing: <...> khi thiếu quyền bắt buộc (sắp xếp, phân tách bằng dấu phẩy). Hãy in giá trị này ngay cả khi người dùng cũng có quyền bị cấm.
  • forbidden: <...> khi không thiếu quyền bắt buộc nhưng người dùng có quyền bị cấm (sắp xếp, phân tách bằng dấu phẩy)

Với đầu vào read,write,admin / read,write / delete, đầu ra là granted.

Với đầu vào read / read,write / delete, đầu ra là missing: write.

Tự làm thử

let user = Set(readLine()!.components(separatedBy: ","))
let required = Set(readLine()!.components(separatedBy: ","))
let forbidden = Set(readLine()!.components(separatedBy: ","))

// TODO: granted | missing: ... | forbidden: ...
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng thực thi

Tự luyện tập: Playground Swift