Menu
CoddyTech

Thêm và xóa phần tử khỏi tập hợp

Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 19 trên 65.

Sau khi có một Set, bạn thường cần chỉnh sửa nội dung bằng cách thêm phần tử mới hoặc xóa phần tử hiện có. Các phương thức add() và remove() giúp bạn dễ dàng quản lý các phần tử trong tập hợp.

Phương thức add() thử thêm một phần tử mới vào tập hợp (set). Tuy nhiên, vì tập hợp chỉ lưu các giá trị duy nhất, nếu bạn thử thêm một phần tử đã tồn tại, phương thức này sẽ không làm gì cả: không xảy ra lỗi và tập hợp vẫn không thay đổi.

Set<String> usernames = {'alice', 'bob', 'charlie'};

usernames.add('diana');     // Thêm 'diana' thành công
usernames.add('alice');     // Không có gì thay đổi vì 'alice' đã tồn tại

print(usernames);  // {alice, bob, charlie, diana}

Phương thức remove() hoạt động bằng cách nhận giá trị bạn muốn xóa rồi loại bỏ giá trị đó khỏi tập hợp. Nếu phần tử không tồn tại trong tập hợp, phương thức sẽ không làm gì cả, nên bạn có thể dùng phương thức này an toàn mà không cần kiểm tra trước.

usernames.remove('bob');        // Xóa 'bob'
usernames.remove('unknown');    // Không làm gì vì không tìm thấy phần tử

print(usernames);  // {alice, charlie, diana}
challenge icon

Thử thách

Dễ

Tạo một chương trình quản lý hệ thống cộng tác nhóm bằng cách thêm thành viên mới và xóa thành viên không còn hoạt động khỏi nhóm dự án. Chương trình của bạn cần:

  1. Đọc một chuỗi đầu vào đại diện cho tên dự án
  2. Đọc nhiều chuỗi đầu vào đại diện cho các thành viên ban đầu của nhóm (đầu vào kết thúc khi bạn nhận được "initial_done")
  3. Đọc nhiều chuỗi đầu vào đại diện cho các thành viên mới cần thêm (đầu vào kết thúc khi bạn nhận được "add_done")
  4. Đọc nhiều chuỗi đầu vào đại diện cho các thành viên cần xóa (đầu vào kết thúc khi bạn nhận được "remove_done")
  5. Tạo một tập hợp với các thành viên ban đầu của nhóm
  6. Dùng phương thức add() để thêm từng thành viên mới vào nhóm
  7. Dùng phương thức remove() để xóa từng thành viên được chỉ định khỏi nhóm
  8. In kết quả quản lý nhóm theo chính xác định dạng bên dưới

Ví dụ, nếu tên dự án là "Mobile App Development", các thành viên ban đầu là "Alice", "Bob", "Charlie", các thành viên mới cần thêm là "Diana", "Alice", "Eve", và các thành viên cần xóa là "Bob", "Frank", chương trình của bạn sẽ in ra:

Project: Mobile App Development
Initial team: {Alice, Bob, Charlie}
Adding new members: [Diana, Alice, Eve]
After adding members: {Alice, Bob, Charlie, Diana, Eve}
Removing members: [Bob, Frank]
Final team: {Alice, Charlie, Diana, Eve}
Team size: 4
Status: Team updated successfully

Nếu tên dự án là "Website Redesign", các thành viên ban đầu là "John", "Sarah", các thành viên mới cần thêm là "Mike", "John", và các thành viên cần xóa là "Sarah", "Unknown", chương trình của bạn sẽ in ra:

Project: Website Redesign
Initial team: {John, Sarah}
Adding new members: [Mike, John]
After adding members: {John, Sarah, Mike}
Removing members: [Sarah, Unknown]
Final team: {John, Mike}
Team size: 2
Status: Team updated successfully

Nếu tên dự án là "Data Analysis", các thành viên ban đầu là "Emma", các thành viên mới cần thêm là "Tom", "Lisa", và các thành viên cần xóa là "Emma", chương trình của bạn sẽ in ra:

Project: Data Analysis
Initial team: {Emma}
Adding new members: [Tom, Lisa]
After adding members: {Emma, Tom, Lisa}
Removing members: [Emma]
Final team: {Tom, Lisa}
Team size: 2
Status: Team updated successfully

Chương trình của bạn phải cho thấy phương thức add() không làm gì khi cố thêm một thành viên đã có trong nhóm, và phương thức remove() không làm gì khi cố xóa một thành viên không tồn tại. Lưu các danh sách đầu vào để cho thấy những thao tác nào đã được thực hiện, sau đó hiển thị nội dung của tập hợp sau mỗi thao tác để minh họa tính duy nhất của tập hợp.

Tự làm thử

import 'dart:io';

void main() {
  // Đọc tên dự án
  String? projectName = stdin.readLineSync();
  
  // Đọc danh sách thành viên ban đầu của nhóm
  List<String> initialMembers = [];
  String? member;
  while ((member = stdin.readLineSync()) != "initial_done") {
    initialMembers.add(member!);
  }
  
  // Đọc danh sách thành viên mới cần thêm
  List<String> membersToAdd = [];
  while ((member = stdin.readLineSync()) != "add_done") {
    membersToAdd.add(member!);
  }
  
  // Đọc danh sách thành viên cần xóa
  List<String> membersToRemove = [];
  while ((member = stdin.readLineSync()) != "remove_done") {
    membersToRemove.add(member!);
  }
  
  // TODO: Viết code của bạn bên dưới
  // Tạo tập hợp Set chứa các thành viên ban đầu của nhóm
  // Thêm thành viên mới bằng phương thức add()
  // Xóa thành viên bằng phương thức remove()
  
  // In kết quả theo định dạng yêu cầu
  print("Project: $projectName");
  // Thêm các câu lệnh in ra còn lại ở đây
}
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 điều khiển

Tự luyện tập: Trình biên dịch Dart online