Transformieren mit 'map'
Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 10 von 65.
Wenn Sie jedes Element in einer Liste in etwas Neues umwandeln müssen, bietet Dart die leistungsstarke map()-Methode. Diese Methode wendet eine Transformationsfunktion auf jedes Element in der Liste an und erstellt eine neue Liste, die alle transformierten Ergebnisse enthält.
Die map()-Methode nimmt eine Funktion als Parameter entgegen, die definiert, wie jedes Element transformiert werden soll. Diese Funktion erhält jedes Element aus der ursprünglichen Liste und gibt die transformierte Version zurück. Die map()-Methode sammelt dann all diese transformierten Werte in einer neuen Liste.
List<int> numbers = [1, 2, 3, 4, 5];
// Transformiere jede Zahl, indem du sie verdoppelst
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)Dieser Ansatz ist viel eleganter, als manuell eine neue Liste zu erstellen und eine Schleife zu verwenden, um jedes Element zu transformieren. Die map()-Methode stellt ein grundlegendes Konzept der funktionalen Programmierung dar, das es Ihnen ermöglicht, Datentransformationen auf klare und prägnante Weise auszudrücken.
Aufgabe
EinfachErstellen Sie ein Programm, das ein Produktpreissystem verwaltet, indem es prozentuale Preisanpassungen auf alle Artikel in einem Inventar anwendet. Ihr Programm sollte:
- Einen String einlesen, der den Namen des Geschäfts (Store Name) darstellt
- Mehrere Dezimalzahlen einlesen, die die ursprünglichen Produktpreise darstellen (die Eingabe endet, wenn Sie
-1erhalten) - Eine Dezimalzahl einlesen, die die prozentuale Anpassung darstellt (positiv für Preiserhöhung, negativ für Rabatt)
- Die
map()-Methode verwenden, um jeden Preis durch Anwendung der prozentualen Anpassung zu transformieren - Die Ergebnisse der Preisanpassung im exakt unten gezeigten Format ausgeben
Wenn zum Beispiel der Name des Geschäfts "Tech Store" ist, die Preise 99.99, 149.50, 79.99, 199.99 sind und die Anpassung 15.0 (15 % Erhöhung) beträgt, sollte Ihr Programm Folgendes ausgeben:
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 completedWenn der Name des Geschäfts "Fashion Outlet" ist, die Preise 29.99, 45.00 sind und die Anpassung -20.0 (20 % Rabatt) beträgt, sollte Ihr Programm Folgendes ausgeben:
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 completedWenn der Name des Geschäfts "Book Corner" ist und nur ein Preis 12.50 mit einer Anpassung von 0.0 angegeben wird, sollte Ihr Programm Folgendes ausgeben:
Store: Book Corner
Original prices: [12.5]
Applying 0.0% adjustment
Adjusted prices: (12.5)
Total items processed: 1
Status: Price adjustment completedIhr Programm muss die map()-Methode mit einer Transformationsfunktion verwenden, die den neuen Preis mit der Formel berechnet: originalPrice * (1 + percentage / 100). Die map()-Methode sollte ein Iterable zurückgeben, das alle angepassten Preise enthält, die im Klammerformat angezeigt werden.
Spickzettel
Die map() Methode transformiert jedes Element in einer Liste, indem sie eine Funktion auf jedes Element anwendet und eine neue Liste mit den Ergebnissen erstellt.
Die map() Methode nimmt eine Funktion als Parameter entgegen, die die Transformation definiert. Diese Funktion erhält jedes Element und gibt die transformierte Version zurück:
List<int> numbers = [1, 2, 3, 4, 5];
// Jede Zahl durch Verdoppelung transformieren
var doubled = numbers.map((number) => number * 2);
print(doubled); // (2, 4, 6, 8, 10)Dies ist eleganter, als manuell eine neue Liste zu erstellen und Schleifen für die Transformation zu verwenden.
Probier es selbst
import 'dart:io';
void main() {
// Geschäftsnamen lesen
String? storeName = stdin.readLineSync();
// Preise lesen, bis -1 eingegeben wird
List<double> prices = [];
while (true) {
String? input = stdin.readLineSync();
double price = double.parse(input!);
if (price == -1) {
break;
}
prices.add(price);
}
// Prozentuale Anpassung lesen
String? adjustmentInput = stdin.readLineSync();
double adjustment = double.parse(adjustmentInput!);
// TODO: Schreiben Sie Ihren Code unten
// Verwenden Sie die map()-Methode, um die prozentuale Anpassung auf alle Preise anzuwenden
// Formel: originalPrice * (1 + Prozentsatz / 100)
// Ergebnisse ausgeben
print('Store: $storeName');
print('Original prices: $prices');
print('Applying $adjustment% adjustment');
// Angepasste Preise im Klammerformat ausgeben
// Gesamtzahl der verarbeiteten Artikel ausgeben
// Statusmeldung ausgeben
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Fortgeschrittene Listenmanipulation
Listen-Eigenschaften: first & lastListen-Status: isEmpty & isNotEmptyEine Liste umkehrenHinzufügen zu einer Liste: insertElemente aus Liste entfernen: removeWhereSuchen in einer Liste: indexOfEine Liste sortierenEine Liste mischenZusammenfassung – Listen-Organizer4Fortgeschrittene Map-Manipulation
Über eine Map iterierenPrüfen auf Schlüssel und WerteMap-Eigenschaften: keys & valuesBedingtes Hinzufügen: putIfAbsentEinträge aus einer Map entfernenVerschachtelte MapsRückblick – Inventar-Update7Fortgeschrittene Funktionen
Anonyme FunktionenFunktionen als Argumente übergebenClosures verstehenEinführung in die RekursionRekursive Funktion: CountdownRekursive Funktion: FakultätZusammenfassung – List Processor10Abschluss-Herausforderungen
Herausforderung: NotensortiererHerausforderung: VokalzählerHerausforderung: FizzBuzz2Funktionale Listenoperationen
Transformieren mit 'map'Filtern mit 'where''.toList()' verwendenBedingungen prüfen mit 'any'Bedingungen mit 'every'Suchen mit 'firstWhere'Zusammenfassung – Datenfilterung3Sets
Was ist ein Set?Ein Set erstellenHinzufügen und Entfernen in SetsPrüfen auf Elemente in einem SetEine Liste in ein Set umwandelnSet-VereinigungSet-SchnittmengeSet-DifferenzRückblick – Einzigartige Gästeliste