Trasformare con 'map'
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 10 di 65.
Quando devi trasformare ogni elemento di una lista in qualcosa di nuovo, Dart mette a disposizione il potente metodo map(). Questo metodo applica una funzione di trasformazione a ogni elemento della lista e produce un nuovo Iterable lazy dei risultati trasformati (chiama .toList() per ottenere una lista).
Il metodo map() accetta una funzione come parametro, che definisce come trasformare ogni elemento. Questa funzione riceve ogni elemento dalla lista originale e restituisce la versione trasformata. Il metodo map() raccoglie quindi tutti questi valori trasformati in una nuova lista.
List<int> numbers = [1, 2, 3, 4, 5];
// Trasforma ogni numero raddoppiandolo
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)Questo approccio è molto più elegante che creare manualmente una nuova lista e usare un ciclo per trasformare ogni elemento. Il metodo map() rappresenta un concetto fondamentale nella programmazione funzionale, consentendoti di esprimere le trasformazioni dei dati in modo chiaro e conciso.
Sfida
FacileCrea un programma che gestisca un sistema di determinazione dei prezzi dei prodotti applicando variazioni percentuali ai prezzi di tutti gli articoli presenti nell'inventario di un negozio. Il tuo programma deve:
- Leggere una stringa che rappresenta il nome del negozio
- Leggere più valori decimali che rappresentano i prezzi originali dei prodotti (l'input terminerà quando riceverai
-1) - Leggere un valore decimale che rappresenta la variazione percentuale (positivo per un aumento del prezzo, negativo per uno sconto)
- Usare il metodo
map()per trasformare ciascun prezzo applicando la variazione percentuale - Stampare i risultati della variazione dei prezzi nel formato esatto mostrato di seguito
Per esempio, se il nome del negozio è "Tech Store", i prezzi sono 99.99, 149.50, 79.99, 199.99 e la variazione è 15.0 (aumento del 15%), il programma dovrebbe produrre:
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 completedSe il nome del negozio è "Fashion Outlet", i prezzi sono 29.99, 45.00 e la variazione è -20.0 (sconto del 20%), il programma dovrebbe produrre:
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 completedSe il nome del negozio è "Book Corner" e viene fornito un solo prezzo, 12.50, con una variazione di 0.0, il programma dovrebbe produrre:
Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completedIl programma deve usare il metodo map() con una funzione di trasformazione che calcola il nuovo prezzo usando la formula: originalPrice * (1 + percentage / 100). Il metodo map() dovrebbe restituire un iterabile contenente tutti i prezzi modificati, che verrà visualizzato tra parentesi.
Provalo tu
import 'dart:io';
void main() {
// Leggi il nome del negozio
String? storeName = stdin.readLineSync();
// Leggi i prezzi finché non viene incontrato -1
List<double> prices = [];
while (true) {
String? input = stdin.readLineSync();
double price = double.parse(input!);
if (price == -1) {
break;
}
prices.add(price);
}
// Leggi la variazione percentuale
String? adjustmentInput = stdin.readLineSync();
double adjustment = double.parse(adjustmentInput!);
// TODO: Scrivi il tuo codice qui sotto
// Usa il metodo map() per applicare la variazione percentuale a tutti i prezzi
// Formula: originalPrice * (1 + percentage / 100)
// Visualizza i risultati
print('Store: $storeName');
print('Original prices: $prices');
print('Applying $adjustment% adjustment');
// Stampa i prezzi modificati tra parentesi
// Stampa il numero totale di elementi elaborati
// Stampa il messaggio di stato
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online