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 erzeugt ein neues lazy Iterable der transformierten Ergebnisse (rufen Sie .toList() auf, um eine Liste zu erhalten).
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 durch Verdoppeln
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:
- Eine String-Eingabe lesen, die den Geschäftsnamen repräsentiert
- Mehrere Dezimal-Eingaben lesen, die die ursprünglichen Produktpreise repräsentieren (die Eingabe endet, wenn Sie
-1erhalten) - Eine Dezimal-Eingabe lesen, die die prozentuale Anpassung repräsentiert (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 unten gezeigten exakten Format ausgeben
Wenn zum Beispiel der Geschäftsname "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 Geschäftsname "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 Geschäftsname "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 originalPrice * (1 + percentage / 100) berechnet. Die map()-Methode sollte ein Iterable zurückgeben, das alle angepassten Preise enthält, welche im Klammerformat angezeigt werden.
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: Schreibe deinen Code unten
// Verwende die map() Methode, um die prozentuale Anpassung auf alle Preise anzuwenden
// Formel: originalPrice * (1 + percentage / 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