Menu
CoddyTech

Phép trừ và hiệu đối xứng

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

Hai phép toán tập hợp nữa sẽ hoàn thiện bộ công cụ.

subtracting trả về các phần tử của tập hợp thứ nhất không có trong tập hợp thứ hai:

let a: Set = [1, 2, 3, 4]
let b: Set = [3, 4, 5]
a.subtracting(b)             // {1, 2}

symmetricDifference trả về các phần tử chỉ có trong một trong hai tập hợp, không bao giờ có trong cả hai:

a.symmetricDifference(b)     // {1, 2, 5}

Cùng với union và intersection, bốn phép toán này bao quát mọi bài toán về đại số tập hợp bạn thường gặp hằng ngày.

Việc kiểm tra một giá trị có thuộc tập hợp cũng hữu ích như một bộ lọc: kiểm tra xem một giá trị có nằm trong tập hợp trong thời gian O(1) hay không:

let stopwords: Set = ["the", "a", "an"]
let words = ["the", "cat", "sat", "on", "a", "mat"]
let real = words.filter { !stopwords.contains($0) }
// ["cat", "sat", "on", "mat"]
challenge icon

Thử thách

Dễ

Đọc hai dòng đầu vào, mỗi dòng là một danh sách chuỗi được phân tách bằng dấu phẩy. Lần lượt coi chúng là currentMembers và renewedMembers.

In ra ba dòng, mỗi dòng được sắp xếp theo thứ tự bảng chữ cái và nối bằng , (hoặc để trống nếu không có phần tử nào):

  1. Lapsed: <...> > hiện tại trừ đi đã gia hạn
  2. New: <...> > đã gia hạn trừ đi hiện tại
  3. Stayed: <...> > giao của hai tập hợp

Với đầu vào alice,bob,cara ở dòng 1 và bob,cara,dan ở dòng 2, đầu ra là:

Lapsed: alice
New: dan
Stayed: bob,cara

Tự làm thử

let current = Set(readLine()!.components(separatedBy: ","))
let renewed = Set(readLine()!.components(separatedBy: ","))

// TODO: in ra Lapsed (current - renewed), New (renewed - current), Stayed (giao của hai tập hợp)
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