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.
Wyzwanie
ŁatwyUtwó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:
- Odczytać ciąg znaków reprezentujący nazwę usługi strumieniowego przesyłania muzyki
- 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") - 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") - Utworzyć Map do przechowywania tytułów utworów jako kluczy, a liczby ich odtworzeń jako wartości
- Użyć metody
remove(), aby usunąć każdy wskazany utwór z biblioteki - 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 completedJeś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 completedJeś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 completedTwó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
}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
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online