Удаление записей из 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() предоставляет безопасный и эффективный способ удаления записей по их ключу.
Задание
ЛегкоСоздайте программу, которая управляет цифровым музыкальным стриминговым сервисом, отслеживая библиотеки песен и удаляя те из них, которые больше не доступны из-за проблем с лицензированием. Ваша программа должна:
- Прочитать строковый ввод, представляющий название стримингового сервиса
- Прочитать несколько пар входных данных, представляющих названия песен и количество их прослушиваний (ввод закончится, когда вы получите
"library_done") - Прочитать несколько строковых вводов, представляющих песни, которые необходимо удалить из-за проблем с лицензированием (ввод закончится, когда вы получите
"removal_done") - Создать Map для хранения названий песен в качестве ключей и количества их прослушиваний в качестве значений
- Использовать метод
remove()для удаления каждой указанной песни из библиотеки - Рассчитать статистику библиотеки и вывести отчет об удалении в точном формате, показанном ниже
Например, если название сервиса — "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()
// Отслеживание статистики и создание требуемого формата вывода
// Вывод результатов в требуемом формате
// Не забудьте включить: Название сервиса, Исходная библиотека, Процесс удаления,
// Обновленная библиотека и статистика библиотеки
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутая работа со списками
Свойства списка: first и lastСостояние списка: isEmpty и isNotEmptyРазворот спискаДобавление в список: insertУдаление из списка: removeWhereПоиск в списке: indexOfСортировка спискаПеремешивание спискаИтоги — Органайзер списков4Продвинутая работа с Map
Итерация по MapПроверка ключей и значенийСвойства Map: keys и valuesУсловное добавление: putIfAbsentУдаление записей из MapВложенные MapИтоги — Обновление инвентаря2Функциональные операции со списками
Преобразование с помощью 'map'Фильтрация с помощью 'where'Использование '.toList()'Проверка условий с помощью 'any'Условия с 'every'Поиск с помощью 'firstWhere'Повторение — фильтрация данных5Проект: Калькулятор корзины
Настройка проектаДобавление товаров в корзину3Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей