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}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:
- Đọc một chuỗi đầu vào đại diện cho tên dự án
- Đọ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") - Đọ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") - Đọ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") - Tạo một tập hợp với các thành viên ban đầu của nhóm
- Dùng phương thức
add()để thêm từng thành viên mới vào nhóm - Dùng phương thức
remove()để xóa từng thành viên được chỉ định khỏi nhóm - 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 successfullyNế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 successfullyNế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 successfullyChươ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
}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
1Thao tác nâng cao với danh sách
Thuộc tính danh sách: đầu và cuốiTrạng thái danh sách: isEmpty và isNotEmpĐảo ngược danh sáchThêm vào danh sách: insertXóa khỏi danh sách: removeWhereTìm trong danh sách: indexOfSắp xếp danh sáchXáo trộn danh sáchÔn tập: trình sắp xếp danh sách4Thao tác nâng cao với Map
Duyệt qua MapKiểm tra khóa và giá trịCác thuộc tính của Map: khóa và giá trịThêm có điều kiện: putIfAbsentXóa mục khỏi MapMap lồng nhauÔn tập: Cập nhật kho hàng2Thao tác hàm trên danh sách
Biến đổi bằng 'map'Lọc bằng 'where'Dùng '.toList()'Kiểm tra điều kiện bằng 'any'Điều kiện với 'every'Tìm phần tử bằng 'firstWhere'Ôn tập: lọc dữ liệu5Dự án: Tính tiền giỏ hàng
Thiết lập dự ánThêm mặt hàng vào giỏ8Dự án: Trình phân tích văn bản đơn giản
Tổng quan và thiết lập dự ánĐếm ký tự3Tập hợp
Tập hợp là gì?Tạo tập hợpThêm và xóa phần tử khỏi tập hợpKiểm tra phần tử trong tập hợpChuyển danh sách thành tập hợpPhép hợp của các tập hợpPhép giao của các tập hợpPhép hiệu của các tập hợpÔn tập: danh sách khách mời không trùng lặpTự luyện tập: Trình biên dịch Dart online