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) // falseisSuperset(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) // trueisDisjoint(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) // trueBa 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.
Thử thách
Trung bìnhBạn đang kiểm tra quyền truy cập vào một tài liệu. Hãy đọc ba dòng:
- Quyền của người dùng (phân tách bằng dấu phẩy)
- Quyền bắt buộc (phân tách bằng dấu phẩy)
- 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:
grantedmissing: <...>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: ...
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
1Chuỗi chuyên sâu
Đếm và chỉ sốChữ hoa, chữ thường và xóa khoảng trắngTìm kiếm trong chuỗiTách và nối chuỗiThay thế chuỗi conÔn tập: Kiểm tra tên người dùng4Tập hợp
Tạo tập hợpPhép hợp và phép giaoPhép trừ và hiệu đối xứngTập con và tập hợp conÔn tập: Bộ lọc thẻ7Dự án: Theo dõi thói quen
Tổng quan dự ánĐánh dấu hoàn thành10Dự án: bộ máy trắc nghiệm
Tổng quan dự ánĐặt câu hỏiTự luyện tập: Playground Swift