Menu
Coddy logo textTech

Removendo Entradas de um Map

Parte da seção Lógica & Fluxo do Journey de Dart da Coddy — lição 30 de 65.

Ao gerenciar dados em um Map, você frequentemente precisará remover entradas que não são mais necessárias. O método remove() fornece uma maneira direta de excluir um par chave-valor de um mapa usando sua chave.

O método remove() recebe um único parâmetro: a chave da entrada que você deseja excluir. Quando chamado, ele remove tanto a chave quanto seu valor associado do mapa. Se a chave não existir no mapa, o método simplesmente não faz nada sem causar um erro.

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

// Remove the mouse from inventory
inventory.remove('Mouse');
print(inventory);  // {Laptop: 999.99, Keyboard: 75.0}

// Trying to remove a non-existent item does nothing
inventory.remove('Tablet');
print(inventory);  // {Laptop: 999.99, Keyboard: 75.0}

Este método é essencial para manter mapas limpos e atualizados em suas aplicações. Seja você gerenciando inventário, dados de usuário ou qualquer outra coleção onde itens precisam ser removidos, o remove() fornece uma maneira segura e eficiente de excluir entradas por sua chave.

challenge icon

Desafio

Fácil

Crie um programa que gerencie um serviço de streaming de música digital, rastreando bibliotecas de músicas e removendo músicas que não estão mais disponíveis devido a problemas de licenciamento. Seu programa deve:

  1. Ler uma entrada de string representando o nome do serviço de streaming
  2. Ler múltiplos pares de entradas representando títulos de músicas e suas contagens de streaming (a entrada terminará quando você receber "library_done")
  3. Ler múltiplas entradas de string representando músicas a serem removidas devido a problemas de licenciamento (a entrada terminará quando você receber "removal_done")
  4. Criar um Map para armazenar títulos de músicas como chaves e suas contagens de streaming como valores
  5. Usar o método remove() para remover cada música especificada da biblioteca
  6. Calcular as estatísticas da biblioteca e imprimir o relatório de remoção no formato exato mostrado abaixo

Por exemplo, se o nome do serviço for "MusicStream Pro", a biblioteca incluir "Bohemian Rhapsody" com 2500000 streams, "Imagine" com 1800000 streams, "Hotel California" com 2200000 streams, "Stairway to Heaven" com 1900000 streams, e as músicas para remover forem "Imagine", "Yesterday", "Hotel California", seu programa deve exibir:

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 o nome do serviço for "SoundWave", a biblioteca incluir "Shape of You" com 3200000 streams, "Blinding Lights" com 2800000 streams, "Someone Like You" com 2100000 streams, e as músicas para remover forem "Blinding Lights", "Perfect", seu programa deve exibir:

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 o nome do serviço for "AudioHub", a biblioteca incluir "Bad Guy" com 1500000 streams, "Watermelon Sugar" com 1700000 streams, "Levitating" com 1400000 streams, "Good 4 U" com 1600000 streams, e as músicas para remover forem "Bad Guy", "Levitating", "Good 4 U", "Drivers License", seu programa deve exibir:

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

Seu programa deve usar o método remove() para excluir músicas do Map. Acompanhe quais músicas foram removidas com sucesso e quais não foram encontradas. Calcule o total de streams perdidos somando as contagens de streaming das músicas removidas com sucesso. O formato de entrada será: nome do serviço, seguido por títulos de músicas e contagens de streaming alternados (como strings que precisam ser convertidas para inteiros), terminando com "library_done", seguido pelos títulos das músicas a serem removidas terminando com "removal_done".

Folha de consulta

O método remove() exclui um par chave-valor de um Map usando sua chave:

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

// Remove entry by key
inventory.remove('Mouse');
print(inventory);  // {Laptop: 999.99, Keyboard: 75.0}

// Removing non-existent key does nothing
inventory.remove('Tablet');
print(inventory);  // {Laptop: 999.99, Keyboard: 75.0}

O método lida com chaves inexistentes de forma segura, sem causar erros.

Experimente você mesmo

import 'dart:io';

void main() {
  // Ler o nome do serviço
  String? serviceName = stdin.readLineSync();
  
  // Criar um Map para armazenar títulos de músicas e contagens de streaming
  Map<String, int> songLibrary = {};
  
  // Ler os dados da biblioteca de músicas
  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;
  }
  
  // Ler músicas para remover
  List<String> songsToRemove = [];
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "removal_done") break;
    songsToRemove.add(input!);
  }
  
  // TODO: Escreva seu código abaixo
  // Processar a remoção de músicas usando o método remove()
  // Acompanhar estatísticas e gerar o formato de saída exigido
  
  // Imprimir os resultados no formato exigido
  // Lembre-se de incluir: Nome do serviço, Biblioteca Original, Processo de Remoção, 
  // Biblioteca Atualizada e Estatísticas da Biblioteca
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo