Xóa mục khỏi Map
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 30 trên 65.
Khi quản lý dữ liệu trong Map, bạn thường cần xóa những mục không còn cần thiết. Phương thức remove() giúp bạn dễ dàng xóa một cặp khóa-giá trị khỏi bản đồ bằng khóa của nó.
Phương thức remove() nhận một tham số duy nhất: khóa của mục bạn muốn xóa. Khi được gọi, phương thức này xóa cả khóa lẫn giá trị tương ứng khỏi bản đồ. Nếu khóa không tồn tại trong bản đồ, phương thức chỉ đơn giản là không làm gì mà không gây ra lỗi.
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
// Xóa chuột khỏi inventory
inventory.remove('Mouse');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}
// Thử xóa một mặt hàng không tồn tại sẽ không làm thay đổi gì
inventory.remove('Tablet');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}Phương thức (method) này rất cần thiết để duy trì các từ điển gọn gàng và luôn cập nhật trong ứng dụng của bạn. Dù bạn đang quản lý hàng tồn kho, dữ liệu người dùng hay bất kỳ tập hợp nào khác cần xóa phần tử, remove() giúp bạn xóa các mục theo khóa một cách an toàn và hiệu quả.
Thử thách
DễTạo chương trình quản lý dịch vụ phát nhạc trực tuyến bằng cách theo dõi thư viện bài hát và xóa những bài hát không còn khả dụng do vấn đề cấp phép. Chương trình cần:
- Đọc một chuỗi đầu vào biểu thị tên dịch vụ phát nhạc trực tuyến
- Đọc nhiều cặp đầu vào biểu thị tên bài hát và số lượt phát trực tuyến (đầu vào sẽ kết thúc khi bạn nhận được
"library_done") - Đọc nhiều chuỗi đầu vào biểu thị những bài hát cần xóa do vấn đề cấp phép (đầu vào sẽ kết thúc khi bạn nhận được
"removal_done") - Tạo một Map để lưu tên bài hát làm khóa và số lượt phát trực tuyến làm giá trị
- Dùng phương thức
remove()để xóa từng bài hát được chỉ định khỏi thư viện - Tính toán số liệu thống kê của thư viện và in báo cáo xóa theo đúng định dạng bên dưới
Ví dụ: nếu tên dịch vụ là "MusicStream Pro", thư viện có "Bohemian Rhapsody" với 2500000 lượt phát, "Imagine" với 1800000 lượt phát, "Hotel California" với 2200000 lượt phát, "Stairway to Heaven" với 1900000 lượt phát, và những bài hát cần xóa là "Imagine", "Yesterday", "Hotel California", chương trình của bạn sẽ in ra:
Service: MusicStream Pro
Original Library: {Bohemian Rhapsody: 2500000, Imagine: 1800000, Hotel California: 2200000, Stairway to Heaven: 1900000}
Removal Process:
Removing 'Imagine': Song removed (had 1800000 streams)
Removing 'Yesterday': Song not found in library
Removing 'Hotel California': Song removed (had 2200000 streams)
Updated Library: {Bohemian Rhapsody: 2500000, Stairway to Heaven: 1900000}
Library Statistics:
Songs before removal: 4
Songs after removal: 2
Songs successfully removed: 2
Songs not found: 1
Total streams lost: 4000000
Remaining total streams: 4400000
Status: Library update completedNếu tên dịch vụ là "SoundWave", thư viện có "Shape of You" với 3200000 lượt phát, "Blinding Lights" với 2800000 lượt phát, "Someone Like You" với 2100000 lượt phát, và những bài hát cần xóa là "Blinding Lights", "Perfect", chương trình của bạn sẽ in ra:
Service: SoundWave
Original Library: {Shape of You: 3200000, Blinding Lights: 2800000, Someone Like You: 2100000}
Removal Process:
Removing 'Blinding Lights': Song removed (had 2800000 streams)
Removing 'Perfect': Song not found in library
Updated Library: {Shape of You: 3200000, Someone Like You: 2100000}
Library Statistics:
Songs before removal: 3
Songs after removal: 2
Songs successfully removed: 1
Songs not found: 1
Total streams lost: 2800000
Remaining total streams: 5300000
Status: Library update completedNếu tên dịch vụ là "AudioHub", thư viện có "Bad Guy" với 1500000 lượt phát, "Watermelon Sugar" với 1700000 lượt phát, "Levitating" với 1400000 lượt phát, "Good 4 U" với 1600000 lượt phát, và những bài hát cần xóa là "Bad Guy", "Levitating", "Good 4 U", "Drivers License", chương trình của bạn sẽ in ra:
Service: AudioHub
Original Library: {Bad Guy: 1500000, Watermelon Sugar: 1700000, Levitating: 1400000, Good 4 U: 1600000}
Removal Process:
Removing 'Bad Guy': Song removed (had 1500000 streams)
Removing 'Levitating': Song removed (had 1400000 streams)
Removing 'Good 4 U': Song removed (had 1600000 streams)
Removing 'Drivers License': Song not found in library
Updated Library: {Watermelon Sugar: 1700000}
Library Statistics:
Songs before removal: 4
Songs after removal: 1
Songs successfully removed: 3
Songs not found: 1
Total streams lost: 4500000
Remaining total streams: 1700000
Status: Library update completedChương trình của bạn phải dùng phương thức remove() để xóa bài hát khỏi Map. Theo dõi những bài hát đã xóa thành công và những bài hát không tìm thấy. Tính tổng số lượt phát bị mất bằng cách cộng số lượt phát của những bài hát đã xóa thành công. Định dạng đầu vào sẽ là: tên dịch vụ, sau đó là các tên bài hát và số lượt phát xen kẽ (dưới dạng chuỗi cần chuyển thành số nguyên), kết thúc bằng "library_done", tiếp theo là tên các bài hát cần xóa, kết thúc bằng "removal_done".
Tự làm thử
import 'dart:io';
void main() {
// Đọc tên dịch vụ
String? serviceName = stdin.readLineSync();
// Tạo Map để lưu tên bài hát và số lượt phát trực tuyến
Map<String, int> songLibrary = {};
// Đọc dữ liệu thư viện bài hát
while (true) {
String? input = stdin.readLineSync();
if (input == "library_done") break;
String songTitle = input!;
String? streamCountStr = stdin.readLineSync();
int streamCount = int.parse(streamCountStr!);
songLibrary[songTitle] = streamCount;
}
// Đọc danh sách bài hát cần xóa
List<String> songsToRemove = [];
while (true) {
String? input = stdin.readLineSync();
if (input == "removal_done") break;
songsToRemove.add(input!);
}
// TODO: Viết code của bạn bên dưới
// Xóa bài hát bằng phương thức remove()
// Thống kê và tạo đầu ra theo định dạng yêu cầu
// In kết quả theo định dạng yêu cầu
// Nhớ bao gồm: tên dịch vụ, thư viện ban đầu, quá trình xóa,
// thư viện sau khi cập nhật và thống kê thư viện
}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