Menu
Coddy logo textTech

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.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das ein Produktpreissystem verwaltet, indem es prozentuale Preisanpassungen auf alle Artikel in einem Inventar anwendet. Ihr Programm sollte:

  1. Einen String einlesen, der den Namen des Geschäfts (Store Name) darstellt
  2. Mehrere Dezimalzahlen einlesen, die die ursprünglichen Produktpreise darstellen (die Eingabe endet, wenn Sie -1 erhalten)
  3. Eine Dezimalzahl einlesen, die die prozentuale Anpassung darstellt (positiv für Preiserhöhung, negativ für Rabatt)
  4. Die map()-Methode verwenden, um jeden Preis durch Anwendung der prozentualen Anpassung zu transformieren
  5. 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 completed

Wenn 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 completed

Wenn 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 completed

Ihr 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
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf