Преобразование с помощью 'map'
Часть раздела Логика и управление потоком путешествия по Dart на Coddy — урок 10 из 65.
Когда вам нужно преобразовать каждый элемент в списке во что-то новое, Dart предоставляет мощный метод map(). Этот метод применяет функцию преобразования к каждому элементу в списке и создает новый список, содержащий все преобразованные результаты.
Метод map() принимает функцию в качестве параметра, которая определяет, как должен быть преобразован каждый элемент. Эта функция получает каждый элемент из исходного списка и возвращает его преобразованную версию. Затем метод map() собирает все эти преобразованные значения в новый список.
List<int> numbers = [1, 2, 3, 4, 5];
// Преобразуем каждое число, удваивая его
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)Этот подход гораздо более элегантен, чем ручное создание нового списка и использование цикла для преобразования каждого элемента. Метод map() представляет собой фундаментальную концепцию функционального программирования, позволяющую выражать преобразования данных четким и лаконичным способом.
Задание
ЛегкоСоздайте программу, которая управляет системой ценообразования продуктов, применяя процентную корректировку цен ко всем товарам в инвентаре магазина. Ваша программа должна:
- Прочитать строковый ввод, представляющий название магазина
- Прочитать несколько десятичных вводов, представляющих исходные цены на товары (ввод закончится, когда вы получите
-1) - Прочитать десятичный ввод, представляющий процентную корректировку (положительное число для повышения цены, отрицательное для скидки)
- Использовать метод
map()для преобразования каждой цены путем применения процентной корректировки - Вывести результаты корректировки цен в точном формате, показанном ниже
Например, если название магазина — "Tech Store", цены — 99.99, 149.50, 79.99, 199.99, а корректировка — 15.0 (увеличение на 15%), ваша программа должна вывести:
Store: Tech Store
Original prices: [99.99, 149.5, 79.99, 199.99]
Applying 15.0% adjustment
Adjusted prices: (114.9885, 171.925, 91.9885, 229.9885)
Total items processed: 4
Status: Price adjustment completedЕсли название магазина — "Fashion Outlet", цены — 29.99, 45.00, а корректировка — -20.0 (скидка 20%), ваша программа должна вывести:
Store: Fashion Outlet
Original prices: [29.99, 45.0]
Applying -20.0% adjustment
Adjusted prices: (23.992, 36.0)
Total items processed: 2
Status: Price adjustment completedЕсли название магазина — "Book Corner" и указана только одна цена 12.50 с корректировкой 0.0, ваша программа должна вывести:
Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completedВаша программа должна использовать метод map() с функцией преобразования, которая рассчитывает новую цену по формуле: originalPrice * (1 + percentage / 100). Метод map() должен возвращать итерируемый объект, содержащий все скорректированные цены, которые будут отображаться в формате с круглыми скобками.
Шпаргалка
Метод map() преобразует каждый элемент в списке, применяя функцию к каждому элементу и создавая новый список с результатами.
Метод map() принимает функцию в качестве параметра, которая определяет преобразование. Эта функция получает каждый элемент и возвращает его преобразованную версию:
List<int> numbers = [1, 2, 3, 4, 5];
// Преобразуем каждое число, удваивая его
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)Это более элегантно, чем создание нового списка вручную и использование циклов для преобразования.
Попробуйте сами
import 'dart:io';
void main() {
// Прочитать название магазина
String? storeName = stdin.readLineSync();
// Читать цены, пока не встретится -1
List<double> prices = [];
while (true) {
String? input = stdin.readLineSync();
double price = double.parse(input!);
if (price == -1) {
break;
}
prices.add(price);
}
// Прочитать процентную корректировку
String? adjustmentInput = stdin.readLineSync();
double adjustment = double.parse(adjustmentInput!);
// TODO: Напишите свой код ниже
// Используйте метод map(), чтобы применить процентную корректировку ко всем ценам
// Формула: originalPrice * (1 + percentage / 100)
// Вывести результаты
print('Store: $storeName');
print('Original prices: $prices');
print('Applying $adjustment% adjustment');
// Вывести скорректированные цены в формате в скобках
// Вывести общее количество обработанных товаров
// Вывести статусное сообщение
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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Множества
Что такое множество?Создание множестваДобавление и удаление элементовПроверка наличия элементов в множествеПреобразование списка в множествоОбъединение множествПересечение множествРазность множествИтоги: уникальный список гостей