Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Crea 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à:

  1. Leggere una stringa di input che rappresenta il nome del servizio di streaming
  2. Leggere più coppie di input che rappresentano i titoli dei brani e il numero di streaming (l’input terminerà quando riceverai "library_done")
  3. Leggere più stringhe di input che rappresentano i brani da rimuovere a causa di problemi di licenza (l’input terminerà quando riceverai "removal_done")
  4. Creare una Map per memorizzare i titoli dei brani come chiavi e il numero di streaming come valori
  5. Usare il metodo remove() per rimuovere dalla libreria ogni brano specificato
  6. 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 completed

Se 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 completed

Se 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 completed

Il 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
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Dart online