Menu
CoddyTech

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ả.

challenge icon

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:

  1. Đọc một chuỗi đầu vào biểu thị tên dịch vụ phát nhạc trực tuyến
  2. Đọ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")
  3. Đọ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")
  4. 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ị
  5. Dùng phương thức remove() để xóa từng bài hát được chỉ định khỏi thư viện
  6. 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 completed

Nế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 completed

Nế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 completed

Chươ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
}
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