Menu
Coddy logo textTech

Преобразование с помощью 'map'

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

Когда вам нужно преобразовать каждый элемент списка во что-то новое, Dart предоставляет мощный метод map(). Этот метод применяет функцию преобразования к каждому элементу списка и создает новый ленивый Iterable из преобразованных результатов (вызовите .toList(), чтобы получить список).

Метод 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() представляет собой фундаментальную концепцию функционального программирования, позволяющую выражать преобразования данных четким и лаконичным способом.

challenge icon

Задание

Легко

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

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

Например, если название магазина — "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() должен возвращать итерируемый объект, содержащий все скорректированные цены, которые будут отображаться в формате с круглыми скобками.

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

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');
  // Вывести скорректированные цены в формате в скобках
  // Вывести общее количество обработанных товаров
  // Вывести статусное сообщение
}
quiz iconПроверьте себя

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

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