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.
Desafio
FácilCrie 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:
- Ler uma entrada de string representando o nome do serviço de streaming
- 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") - 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") - Criar um Map para armazenar títulos de músicas como chaves e suas contagens de streaming como valores
- Usar o método
remove()para remover cada música especificada da biblioteca - 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 completedSe 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 completedSe 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 completedSeu 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
}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
1Manipulação Avançada de Listas
Propriedades de Lista: first & lastEstado da Lista: isEmpty & isNotEmptyInvertendo uma ListaAdicionando a uma Lista: insertRemoção em Listas: removeWhereBuscando em uma Lista: indexOfOrdenando uma ListaEmbaralhando uma ListaRecapitulação - Organizador de Listas4Manipulação Avançada de Mapas
Iterando sobre um MapVerificando Chaves e ValoresPropriedades do Map: keys & valuesAdição Condicional: putIfAbsentRemovendo Entradas de um MapMaps AninhadosRecapitulação - Atualização de Inventário2Operações Funcionais em Listas
Transformando com 'map'Filtrando com 'where'Usando '.toList()'Verificando Condições com 'any'Condições com 'every'Encontrando com 'firstWhere'Recapitulação - Filtragem de Dados5Projeto: Cálculo de Carrinho de Compras
Configuração do ProjetoAdicionando Itens ao Carrinho3Conjuntos
O que é um Conjunto?Criando um ConjuntoAdicionando e Removendo de ConjuntosVerificando Elementos em um ConjuntoConvertendo uma Lista para um ConjuntoUnião de ConjuntosInterseção de ConjuntosDiferença de ConjuntosRecapitulação - Lista de Convidados Únicos