Rimuovere elementi da una mappa
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 30 di 65.
Quando gestisci i dati in una Map, spesso dovrai rimuovere le voci che non sono più necessarie. Il metodo remove() offre un modo semplice per eliminare una coppia chiave-valore da una mappa usando la sua chiave.
Il metodo remove() accetta un solo parametro: la chiave della voce che vuoi eliminare. Quando viene chiamato, rimuove dalla mappa sia la chiave sia il valore associato. Se la chiave non esiste nella mappa, il metodo semplicemente non fa nulla senza causare un errore.
Map<String, double> inventory = {
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00
};
// Rimuovi il mouse da inventory
inventory.remove('Mouse');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}
// Tentare di rimuovere un elemento inesistente non produce alcun effetto
inventory.remove('Tablet');
print(inventory); // {Laptop: 999.99, Keyboard: 75.0}Questo metodo è essenziale per mantenere mappe pulite e aggiornate nelle tue applicazioni. Che tu stia gestendo un inventario, dati utente o qualsiasi altra raccolta in cui sia necessario rimuovere elementi, remove() offre un modo sicuro ed efficiente per eliminare voci tramite la relativa chiave.
Sfida
FacileCrea un programma che gestisca un servizio digitale di streaming musicale tenendo traccia delle librerie di brani e rimuovendo i brani che non sono più disponibili a causa di problemi di licenza. Il tuo programma dovrà:
- Leggere una stringa di input che rappresenta il nome del servizio di streaming
- Leggere più coppie di input che rappresentano i titoli dei brani e il numero di streaming (l’input terminerà quando riceverai
"library_done") - Leggere più stringhe di input che rappresentano i brani da rimuovere a causa di problemi di licenza (l’input terminerà quando riceverai
"removal_done") - Creare una Map per memorizzare i titoli dei brani come chiavi e il numero di streaming come valori
- Usare il metodo
remove()per rimuovere dalla libreria ogni brano specificato - Calcolare le statistiche della libreria e stampare il resoconto delle rimozioni nel formato esatto mostrato di seguito
Ad esempio, se il nome del servizio è "MusicStream Pro", la libreria include "Bohemian Rhapsody" con 2500000 streaming, "Imagine" con 1800000 streaming, "Hotel California" con 2200000 streaming, "Stairway to Heaven" con 1900000 streaming e i brani da rimuovere sono "Imagine", "Yesterday", "Hotel California", il tuo programma dovrà produrre:
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 completedSe il nome del servizio è "SoundWave", la libreria include "Shape of You" con 3200000 streaming, "Blinding Lights" con 2800000 streaming, "Someone Like You" con 2100000 streaming e i brani da rimuovere sono "Blinding Lights", "Perfect", il tuo programma dovrà produrre:
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 completedSe il nome del servizio è "AudioHub", la libreria include "Bad Guy" con 1500000 streaming, "Watermelon Sugar" con 1700000 streaming, "Levitating" con 1400000 streaming, "Good 4 U" con 1600000 streaming e i brani da rimuovere sono "Bad Guy", "Levitating", "Good 4 U", "Drivers License", il tuo programma dovrà produrre:
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 completedIl tuo programma deve usare il metodo remove() per eliminare i brani dalla Map. Tieni traccia dei brani rimossi correttamente e di quelli non trovati. Calcola il totale degli streaming persi sommando il numero di streaming dei brani rimossi correttamente. Il formato dell’input sarà: nome del servizio, quindi titoli dei brani e numeri di streaming alternati (come stringhe da convertire in numeri interi), fino a "library_done", seguito dai titoli dei brani da rimuovere fino a "removal_done".
Provalo tu
import 'dart:io';
void main() {
// Leggi il nome del servizio
String? serviceName = stdin.readLineSync();
// Crea una Map per memorizzare i titoli dei brani e il numero di ascolti in streaming
Map<String, int> songLibrary = {};
// Leggi i dati della libreria musicale
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;
}
// Leggi i brani da rimuovere
List<String> songsToRemove = [];
while (true) {
String? input = stdin.readLineSync();
if (input == "removal_done") break;
songsToRemove.add(input!);
}
// TODO: Scrivi il tuo codice qui sotto
// Elabora la rimozione dei brani usando il metodo remove()
// Tieni traccia delle statistiche e genera l'output nel formato richiesto
// Stampa i risultati nel formato richiesto
// Ricorda di includere: nome del servizio, libreria originale, processo di rimozione,
// libreria aggiornata e statistiche della libreria
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online