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 crea una nueva lista que contiene todos los resultados transformados.
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.
Hoja de referencia
El método map() transforma cada elemento de una lista aplicando una función a cada elemento y creando una nueva lista con los resultados.
El método map() toma una función como parámetro que define la transformación. Esta función recibe cada elemento y devuelve la versión transformada:
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)Esto es más elegante que crear manualmente una nueva lista y usar bucles para la transformación.
Pruébalo tú mismo
import 'dart:io';
void main() {
// Leer el nombre de la tienda
String? storeName = stdin.readLineSync();
// Leer precios hasta que se encuentre -1
List<double> prices = [];
while (true) {
String? input = stdin.readLineSync();
double price = double.parse(input!);
if (price == -1) {
break;
}
prices.add(price);
}
// Leer el porcentaje de ajuste
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 porcentual 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 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