Menu
Coddy logo textTech

Usuwanie wpisów z mapy

Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 30 z 65.

Podczas zarządzania danymi w Map często trzeba usuwać wpisy, które nie są już potrzebne. Metoda remove() umożliwia łatwe usunięcie pary klucz-wartość z mapy za pomocą jej klucza.

Metoda remove() przyjmuje jeden parametr: klucz wpisu, który chcesz usunąć. Po wywołaniu usuwa z mapy zarówno klucz, jak i powiązaną z nim wartość. Jeśli klucz nie istnieje w mapie, metoda po prostu nic nie robi i nie powoduje błędu.

Map<String, double> inventory = {
  'Laptop': 999.99,
  'Mouse': 25.50,
  'Keyboard': 75.00
};

// Usuń mysz z inventory
inventory.remove('Mouse');
print(inventory);  // {Laptop: 999.99, Keyboard: 75.0}

// Próba usunięcia nieistniejącego elementu nic nie zmienia
inventory.remove('Tablet');
print(inventory);  // {Laptop: 999.99, Keyboard: 75.0}

Ta metoda jest niezbędna do utrzymywania czystych i aktualnych map w aplikacjach. Niezależnie od tego, czy zarządzasz zapasami, danymi użytkowników, czy inną kolekcją, z której trzeba usuwać elementy, remove() zapewnia bezpieczny i wydajny sposób usuwania wpisów na podstawie ich klucza.

challenge icon

Wyzwanie

Łatwy

Utwórz program zarządzający cyfrową usługą strumieniowego przesyłania muzyki, który śledzi biblioteki utworów i usuwa utwory, które nie są już dostępne z powodu problemów licencyjnych. Twój program powinien:

  1. Odczytać ciąg znaków reprezentujący nazwę usługi strumieniowego przesyłania muzyki
  2. Odczytać wiele par danych wejściowych reprezentujących tytuły utworów i liczbę ich odtworzeń (dane wejściowe zakończą się, gdy otrzymasz "library_done")
  3. Odczytać wiele ciągów znaków reprezentujących utwory do usunięcia z powodu problemów licencyjnych (dane wejściowe zakończą się, gdy otrzymasz "removal_done")
  4. Utworzyć Map do przechowywania tytułów utworów jako kluczy, a liczby ich odtworzeń jako wartości
  5. Użyć metody remove(), aby usunąć każdy wskazany utwór z biblioteki
  6. Obliczyć statystyki biblioteki i wyświetlić raport usuwania w dokładnie takim formacie, jak pokazano poniżej

Na przykład, jeśli nazwa usługi to "MusicStream Pro", biblioteka zawiera "Bohemian Rhapsody" z 2500000 odtworzeniami, "Imagine" z 1800000 odtworzeniami, "Hotel California" z 2200000 odtworzeniami, "Stairway to Heaven" z 1900000 odtworzeniami, a utwory do usunięcia to "Imagine", "Yesterday", "Hotel California", Twój program powinien wyświetlić:

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

Jeśli nazwa usługi to "SoundWave", biblioteka zawiera "Shape of You" z 3200000 odtworzeniami, "Blinding Lights" z 2800000 odtworzeniami, "Someone Like You" z 2100000 odtworzeniami, a utwory do usunięcia to "Blinding Lights", "Perfect", Twój program powinien wyświetlić:

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

Jeśli nazwa usługi to "AudioHub", biblioteka zawiera "Bad Guy" z 1500000 odtworzeniami, "Watermelon Sugar" z 1700000 odtworzeniami, "Levitating" z 1400000 odtworzeniami, "Good 4 U" z 1600000 odtworzeniami, a utwory do usunięcia to "Bad Guy", "Levitating", "Good 4 U", "Drivers License", Twój program powinien wyświetlić:

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

Twój program musi używać metody remove() do usuwania utworów z Map. Śledź, które utwory zostały pomyślnie usunięte, a których nie znaleziono. Oblicz łączną liczbę utraconych odtworzeń, sumując liczbę odtworzeń pomyślnie usuniętych utworów. Format danych wejściowych będzie następujący: nazwa usługi, następnie naprzemiennie tytuły utworów i liczby ich odtworzeń (jako ciągi znaków, które należy przekonwertować na liczby całkowite), zakończone "library_done", a następnie tytuły utworów do usunięcia, zakończone "removal_done".

Spróbuj swoich sił

import 'dart:io';

void main() {
  // Odczytaj nazwę serwisu
  String? serviceName = stdin.readLineSync();
  
  // Utwórz Map do przechowywania tytułów utworów i liczby odtworzeń
  Map<String, int> songLibrary = {};
  
  // Odczytaj dane biblioteki utworów
  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;
  }
  
  // Odczytaj utwory do usunięcia
  List<String> songsToRemove = [];
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "removal_done") break;
    songsToRemove.add(input!);
  }
  
  // TODO: Napisz swój kod poniżej
  // Usuń utwory za pomocą metody remove()
  // Zbieraj statystyki i wygeneruj dane wyjściowe w wymaganym formacie
  
  // Wyświetl wyniki w wymaganym formacie
  // Pamiętaj, aby uwzględnić: nazwę serwisu, pierwotną bibliotekę, proces usuwania, 
  // zaktualizowaną bibliotekę i statystyki biblioteki
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Dart online