Transformar con 'map'
Parte de la sección Lógica y Flujo del Journey de Dart de Coddy — lección 10 de 65.
Cuando necesites transformar cada elemento de una lista en algo nuevo, Dart proporciona el potente método map(). Este método aplica una función de transformación a cada elemento de la lista y produce un nuevo Iterable perezoso de los resultados transformados (llama a .toList() para obtener una lista).
El método map() toma una función como parámetro que define cómo debe transformarse cada elemento. Esta función recibe cada elemento de la lista original y devuelve la versión transformada. El método map() luego recopila todos estos valores transformados en una nueva lista.
List<int> numbers = [1, 2, 3, 4, 5];
// Transforma cada número duplicándolo
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)Este enfoque es mucho más elegante que crear manualmente una nueva lista y usar un bucle para transformar cada elemento. El método map() representa un concepto fundamental en la programación funcional, permitiéndote expresar transformaciones de datos de una manera clara y concisa.
Desafío
FácilCrea un programa que gestione un sistema de precios de productos aplicando ajustes de precio basados en porcentajes a todos los artículos del inventario de una tienda. Tu programa debe:
- Leer una entrada de cadena que represente el nombre de la tienda
- Leer múltiples entradas decimales que representen los precios originales de los productos (la entrada terminará cuando recibas
-1) - Leer una entrada decimal que represente el ajuste porcentual (positivo para aumento de precio, negativo para descuento)
- Usar el método
map()para transformar cada precio aplicando el ajuste porcentual - Imprimir los resultados del ajuste de precios en el formato exacto que se muestra a continuación
Por ejemplo, si el nombre de la tienda es "Tech Store", los precios son 99.99, 149.50, 79.99, 199.99, y el ajuste es 15.0 (15% de aumento), tu programa debería mostrar:
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 completedSi el nombre de la tienda es "Fashion Outlet", los precios son 29.99, 45.00, y el ajuste es -20.0 (20% de descuento), tu programa debería mostrar:
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 completedSi el nombre de la tienda es "Book Corner" y solo se proporciona un precio 12.50 con un ajuste de 0.0, tu programa debería mostrar:
Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completedTu programa debe usar el método map() con una función de transformación que calcule el nuevo precio usando la fórmula: originalPrice * (1 + percentage / 100). El método map() debe devolver un iterable que contenga todos los precios ajustados, los cuales se mostrarán en formato de paréntesis.
Pruébalo tú mismo
import 'dart:io';
void main() {
// Leer el nombre de la tienda
String? storeName = stdin.readLineSync();
// Leer los precios hasta encontrar -1
List<double> prices = [];
while (true) {
String? input = stdin.readLineSync();
double price = double.parse(input!);
if (price == -1) {
break;
}
prices.add(price);
}
// Leer el ajuste de porcentaje
String? adjustmentInput = stdin.readLineSync();
double adjustment = double.parse(adjustmentInput!);
// TODO: Escribe tu código a continuación
// Usa el método map() para aplicar el ajuste de porcentaje a todos los precios
// Fórmula: originalPrice * (1 + percentage / 100)
// Mostrar los resultados
print('Store: $storeName');
print('Original prices: $prices');
print('Applying $adjustment% adjustment');
// Imprimir los precios ajustados en formato de paréntesis
// Imprimir el total de artículos procesados
// Imprimir el mensaje de estado
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Manipulación avanzada de listas
Propiedades de listas: first y lastEstado de la lista: isEmpty y isNotEmptyInvertir una listaAñadir a una lista: insertEliminación en listas: removeWhereBúsqueda en una lista: indexOfOrdenar una listaMezclar una listaResumen - Organizador de listas4Manipulación avanzada de mapas
Iterar sobre un mapaComprobación de claves y valoresPropiedades del mapa: keys y valuesAdición condicional: putIfAbsentEliminar entradas de un mapaMapas anidadosResumen - Actualización de inventario2Operaciones funcionales con listas
Transformar con 'map'Filtrar con 'where'Uso de '.toList()'Comprobar condiciones con 'any'Condiciones con 'every'Búsqueda con 'firstWhere'Resumen - Filtrado de datos5Proyecto: Calculadora de carrito de compras
Configuración del proyectoAgregar artículos al carrito3Conjuntos
¿Qué es un Conjunto?Crear un ConjuntoAñadir y eliminar elementos de un ConjuntoComprobar elementos en un ConjuntoConvertir una lista en un ConjuntoUnión de ConjuntosIntersección de ConjuntosDiferencia de ConjuntosResumen - Lista de invitados única