Menu
Coddy logo textTech

Удаление записей из Map

Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 30 из 65.

При управлении данными в Map вам часто потребуется удалять записи, которые больше не нужны. Метод remove() предоставляет простой способ удаления пары «ключ-значение» из карты по её ключу.

Метод remove() принимает один параметр: ключ записи, которую вы хотите удалить. При вызове он удаляет из карты как ключ, так и связанное с ним значение. Если ключ отсутствует в карте, метод просто ничего не делает, не вызывая ошибки.

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

// Удалить мышь из инвентаря
inventory.remove('Mouse');
print(inventory);  // {Laptop: 999.99, Keyboard: 75.0}

// Попытка удаления несуществующего элемента ничего не меняет
inventory.remove('Tablet');
print(inventory);  // {Laptop: 999.99, Keyboard: 75.0}

Этот метод необходим для поддержания чистоты и актуальности карт в ваших приложениях. Независимо от того, управляете ли вы инвентарем, пользовательскими данными или любой другой коллекцией, из которой необходимо удалять элементы, remove() предоставляет безопасный и эффективный способ удаления записей по их ключу.

challenge icon

Задание

Легко

Создайте программу, которая управляет цифровым музыкальным стриминговым сервисом, отслеживая библиотеки песен и удаляя те из них, которые больше не доступны из-за проблем с лицензированием. Ваша программа должна:

  1. Прочитать строковый ввод, представляющий название стримингового сервиса
  2. Прочитать несколько пар входных данных, представляющих названия песен и количество их прослушиваний (ввод закончится, когда вы получите "library_done")
  3. Прочитать несколько строковых вводов, представляющих песни, которые необходимо удалить из-за проблем с лицензированием (ввод закончится, когда вы получите "removal_done")
  4. Создать Map для хранения названий песен в качестве ключей и количества их прослушиваний в качестве значений
  5. Использовать метод remove() для удаления каждой указанной песни из библиотеки
  6. Рассчитать статистику библиотеки и вывести отчет об удалении в точном формате, показанном ниже

Например, если название сервиса — "MusicStream Pro", библиотека включает "Bohemian Rhapsody" с 2500000 прослушиваниями, "Imagine" с 1800000 прослушиваниями, "Hotel California" с 2200000 прослушиваниями, "Stairway to Heaven" с 1900000 прослушиваниями, а песни для удаления — "Imagine", "Yesterday", "Hotel California", ваша программа должна вывести:

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

Если название сервиса — "SoundWave", библиотека включает "Shape of You" с 3200000 прослушиваниями, "Blinding Lights" с 2800000 прослушиваниями, "Someone Like You" с 2100000 прослушиваниями, а песни для удаления — "Blinding Lights", "Perfect", ваша программа должна вывести:

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

Если название сервиса — "AudioHub", библиотека включает "Bad Guy" с 1500000 прослушиваниями, "Watermelon Sugar" с 1700000 прослушиваниями, "Levitating" с 1400000 прослушиваниями, "Good 4 U" с 1600000 прослушиваниями, а песни для удаления — "Bad Guy", "Levitating", "Good 4 U", "Drivers License", ваша программа должна вывести:

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

Ваша программа должна использовать метод remove() для удаления песен из Map. Отслеживайте, какие песни были успешно удалены, а какие не были найдены. Рассчитайте общее количество потерянных прослушиваний, суммируя количество прослушиваний успешно удаленных песен. Формат ввода будет следующим: название сервиса, затем чередующиеся названия песен и количество прослушиваний (в виде строк, которые необходимо преобразовать в целые числа), заканчивающиеся на "library_done", после чего следуют названия песен для удаления, заканчивающиеся на "removal_done".

Шпаргалка

Метод remove() удаляет пару «ключ-значение» из Map по её ключу:

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

// Удаление записи по ключу
inventory.remove('Mouse');
print(inventory);  // {Laptop: 999.99, Keyboard: 75.0}

// Удаление несуществующего ключа ничего не меняет
inventory.remove('Tablet');
print(inventory);  // {Laptop: 999.99, Keyboard: 75.0}

Метод безопасно обрабатывает несуществующие ключи, не вызывая ошибок.

Попробуйте сами

import 'dart:io';

void main() {
  // Чтение названия сервиса
  String? serviceName = stdin.readLineSync();
  
  // Создание Map для хранения названий песен и количества прослушиваний
  Map<String, int> songLibrary = {};
  
  // Чтение данных библиотеки песен
  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;
  }
  
  // Чтение песен для удаления
  List<String> songsToRemove = [];
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "removal_done") break;
    songsToRemove.add(input!);
  }
  
  // TODO: Напишите свой код ниже
  // Обработка удаления песен с использованием метода remove()
  // Отслеживание статистики и создание требуемого формата вывода
  
  // Вывод результатов в требуемом формате
  // Не забудьте включить: Название сервиса, Исходная библиотека, Процесс удаления, 
  // Обновленная библиотека и статистика библиотеки
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком